मैं एक एएसपी नेट MVC 3.0 वेब अनुप्रयोग से इकाई की रूपरेखा 4.3.1 का उपयोग कर रहा है और मुझे लगता है कि एक पुराने वस्तु detaches और एक नया उद्देश्य यह है कि तरह तो लग रहा है के साथ यह बदल देता है कोड का एक छोटा सा है:इकाई फ्रेमवर्क में अपवाद "इस संबंध प्रबंधक द्वारा अपवाद को वापस नहीं किया जा सकता" का मूल कारण क्या है?
public void UpdateUnattached(T entryToUpdate, T updatedEntry)
{
var ctx = (EntityFrameworkContext) _context;
ctx.ChangeObjectState(EntityState.Detached, entryToUpdate);
_set.Attach(updatedEntry);
ctx.ChangeObjectState(EntityState.Modified, updatedEntry);
}
यह एक मामले को छोड़कर हर समय काम करता है जब मुझे _set.Attach
लाइन पर अपवाद मिलता है।
संबंधित संबंध इस रिलेशनशिप प्रबंधक द्वारा वापस नहीं किया जा सकता है। एक संबंधित अंत केवल उन ऑब्जेक्ट्स के लिए रिलेशनशिप मैनेजर द्वारा लौटाया जा सकता है जिन्हें ऑब्जेक्टस्टेट मैनेजर द्वारा ट्रैक किया जाता है या जो IEntityWithRelationships को लागू करता है।
ऑब्जेक्ट ग्राफ बहुत गहरा है और मुझे लगता है कि यह मुझे बता रहा है कि ऐसी संपत्ति है जो किसी ऑब्जेक्ट पर सेट की गई है जिसे कहीं भी ट्रैक नहीं किया गया है (अगर मैं गलत हूं तो कृपया मुझे सही करें)। तो, मेरा सवाल है ...
मैं कैसे पता लगा सकता हूं कि इस अपवाद का मूल कारण क्या है?
मैंने इसे पकड़ने/पकड़ने और पकड़ने में GetValidationErrors
पर कॉल करने का प्रयास किया है, लेकिन यह भी उसी अपवाद के साथ फेंकता है। अपवाद से
अधिक जानकारी (InnerException
रिक्त है) ...
Type: System.InvalidOperationException
Source: System.Data.Entity
Target site: GetRelatedEndInternal
Stacktrace: at System.Data.Objects.DataClasses.RelationshipManager.GetRelatedEndInternal(String relationshipName, String targetRoleName)
at System.Data.Objects.EntityEntry.FindRelatedEntityKeysByForeignKeys(Dictionary`2& relatedEntities, Boolean useOriginalValues)
at System.Data.Objects.EntityEntry.TakeSnapshotOfForeignKeys()
at System.Data.Objects.ObjectStateManager.PromoteKeyEntryInitialization(EntityEntry keyEntry, IEntityWrapper wrappedEntity, IExtendedDataRecord shadowValues, Boolean replacingEntry)
at System.Data.Objects.ObjectContext.AttachSingleObject(IEntityWrapper wrappedEntity, EntitySet entitySet, String argumentName)
at System.Data.Objects.ObjectContext.AttachTo(String entitySetName, Object entity)
at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
at System.Data.Entity.Internal.Linq.InternalSet`1.Attach(Object entity)
at System.Data.Entity.DbSet`1.Attach(TEntity entity)
at ... snip ...
क्या आप संलग्न इकाई को उनको स्वैप करने की कोशिश करने के बिना अटैचमेंट इकाई के मानों के साथ अद्यतन नहीं करना चाहिए? आप इसके द्वारा कुछ संगठनों को काटते प्रतीत होते हैं। –
धन्यवाद, हां - दिलचस्प बात यह है कि यदि आप कहते हैं तो ठीक है (प्रविष्टि की प्रत्येक संपत्ति को अद्यतन करने के लिए अद्यतन करें और फिर अटैचिंग के बजाय सहेजें) यह काम करता है। मैं जो जानना चाहता हूं, यही कारण है कि अनुलग्नक काम नहीं करता है और यह जानना कि मैं जानना चाहता हूं कि इस अपवाद के लिए मूल कारण क्या था। निश्चित रूप से जब से अपवाद फेंक दिया गया तो ढांचे को पता होना चाहिए - मैं चाहता हूं कि उसने मुझे बताया था। – kmp
मुझे लगता है कि यह अलग है जो समस्याओं का कारण बनता है।मैं अपवाद से समझता हूं कि रिलेशनशिप मैनेजर किसी ऑब्जेक्ट के एसोसिएशन को हल करने का प्रयास करता है जिसे अब ट्रैक नहीं किया जाता है। –