2012-05-01 15 views
9

मैं एक State की List<State> इकाई वस्तुओं है, और प्रत्येक State वस्तु अन्य वस्तुओं का संग्रह है, इस तरह के Licenses, Taxes, Bonds, के रूप में आदिमुझे System.Data.Entity.dll (इकाई फ्रेमवर्क) में NullReferenceException क्यों मिल रहा है?

वहाँ भी ExpiredObjects के लिए एक संग्रह है, जो किसी भी वस्तु है जो की एक सूची है समाप्त हो गया और नवीनीकृत करने की जरूरत है। किसी कारण से, यह संपत्ति मुझे NullReferenceException दे रही है जब मैं इसे एक विशिष्ट स्थिति (नेवादा) के लिए कोशिश करता हूं और एक्सेस करता हूं, लेकिन मैं अपने जीवन के लिए वास्तव में null क्या नहीं देख सकता क्योंकि मुझे कोई null मान नहीं दिख रहा है कहीं भी।

मेरा कोड यहां अपवाद फेंकता है। यह सभी राज्यों के माध्यम से loops, और सभी ExpiredObjects एक दृश्य-विशिष्ट संग्रह में प्रदर्शित होता है जो प्रदर्शित हो जाता है। मेरे परीक्षण कोड अभी भी शामिल किया गया है

private List<ExpiredObject> LoadAllExpiredObjects() 
    { 
     var list = new List<ExpiredObject>(); 
     foreach (var state in States) 
     { 
      // This tells me the state is not null, and neither is state.ExpiredObjects 
      Debug.WriteLine(string.Format("{0}|{1}|{2}", 
       state.Name, state == null, state.ExpiredObjects == null)); 

      try 
      { 
       var x = state.ExpiredObjects; 
       Debug.WriteLine(x == null); 

       // Exception occurs on the "for" line on the Nevada state only 
       // Contents in for loop do not execute 
       foreach (var item in x) 
       { 
        Debug.WriteLine(string.Format("{0}", item)); 
        list.Add(item); 
       } 

       // This used to be the only line of code before I started testing 
       // It fails on Nevada 
       //list.AddRange(state.ExpiredObjects); 
      } 
      catch (Exception ex) 
      { 
       Debug.WriteLine(ex.Message); 
       Debug.WriteLine(ex.StackTrace); 
      } 
     } 
     return list; 
    } 

त्रुटि के स्टैक ट्रेस यह है:

A first chance exception of type 'System.NullReferenceException' occurred in System.Data.Entity.dll 
Object reference not set to an instance of an object. 
    at System.Data.EntityKey.AddHashValue(Int32 hashCode, Object keyValue) 
    at System.Data.EntityKey.GetHashCode() 
    at System.Collections.Generic.GenericEqualityComparer`1.GetHashCode(T obj) 
    at System.Collections.Generic.Dictionary`2.FindEntry(TKey key) 
    at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value) 
    at System.Data.Objects.ObjectStateManager.TryGetEntityEntry(EntityKey key, EntityEntry& entry) 
    at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet) 
    at lambda_method(Closure , Shaper) 
    at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) 
    at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext() 
    at System.Data.Objects.DataClasses.RelatedEnd.Merge[TEntity](IEnumerable`1 collection, MergeOption mergeOption, Boolean setIsLoaded) 
    at System.Data.Objects.DataClasses.EntityCollection`1.Load(List`1 collection, MergeOption mergeOption) 
    at System.Data.Objects.DataClasses.EntityCollection`1.Load(MergeOption mergeOption) 
    at System.Data.Objects.DataClasses.RelatedEnd.Load() 
    at System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad() 
    at System.Data.Objects.DataClasses.EntityCollection`1.GetEnumerator() 
    at MyNamespace.StatesViewModel.LoadAllExpiredObjects() in C:\Users\me\Desktop\MySolution\StatesViewModel.cs:line 217 

मैं भी ठीक उसी त्रुटि जब मैं नेवादा का चयन करके उसे ExpiredObjects करने के लिए एक DataGrid बाध्य करने की कोशिश करता है मिल संग्रह (यदि मैं बाध्यकारी टिप्पणी करता हूं, तो कोड ठीक काम करता है)

क्या किसी को पता है कि यह त्रुटि क्या हो सकती है?

+4

यदि यह नेवादा के लिए ही है उसे वे लोग, डेटा समस्या होना चाहिए DB में एक संपूर्ण जांच। –

+1

@ हेनकहोल्टरमैन क्षमा करें, मुझे यकीन नहीं था कि कौन सी जानकारी प्रासंगिक थी। यह डीबी-पहला था। सभी ऑब्जेक्ट्स ('स्टेट', 'लाइसेंस',' कर', इत्यादि) में अपनी खुद की डेटाबेस टेबल है जो उन्हें जोड़ने वाली विदेशी कुंजी के साथ है। उनके पास अपनी प्राथमिक कुंजी भी होती है, और कुछ भी विरासत में नहीं मिलता है। मैं अब डेटा देख रहा हूं - यकीन नहीं है कि मैंने – Rachel

+2

@ हेनकहोल्टरमैन से पहले ऐसा क्यों नहीं किया था, आप सही हैं, समस्या डेटा में थी। मेरी प्रक्रिया जिसने समाप्त की गई वस्तुओं को खींच लिया था, उन क्षेत्रों में से एक के लिए 'शून्य' मान लौटा रहा था जो ईएफ में चिह्नित नहीं था, इसलिए जब भी वह डेटाबेस से उस ऑब्जेक्ट को प्राप्त करने का प्रयास करता था, तो यह एक त्रुटि फेंक देगा। धन्यवाद, और यदि आप इसे उत्तर के रूप में पोस्ट करते हैं तो मैं इसे स्वीकार करूंगा :) – Rachel

उत्तर

14

यदि यह केवल नेवादा के लिए है तो यह डेटा समस्या होनी चाहिए, डीबी में पूरी तरह जांच करें।

और संक्षेप में प्रस्तुत करने, मुख्य समस्या थी:

  • यह था db-पहले।
  • ... फ़ील्ड के रूप में नहीं अशक्त
+1

इस उत्तर को पोस्ट करने के लिए धन्यवाद। यह सिर-बैंगिंग के घंटों समाप्त हो गया ... – Deane

+0

ओह आदमी, यह खोजने में कुछ समय लगा लेकिन उसने मुझे सही दिशा में भेजा।मुझे एक ही त्रुटि थी, मेरा टेबल डेटा ठीक था, लेकिन मेरे पास एक एसक्यूएल व्यू के आधार पर एक इकाई वस्तु थी जिसमें एक अनुचित शामिल था जिसमें एक शून्य रिकॉर्ड डाला गया था, पूरी चीज को मार डाला गया था। सहायता के लिए धन्यवाद। + 1 सब के आसपास है। –

0

मैं जब गलती से एक मॉड्यूलर वास्तुकला में एक मॉड्यूल कई बार लोड हो रहा है एक ही समस्या मिला एफई में चिह्नित किया गया था में से एक के लिए एक शून्य मान लौट रहा था।

अतिरिक्त, मॉड्यूल (ओं) जहां एक ही DbContext की 2 प्रतियों का उपयोग करते हुए, एक संदर्भ से एक संदर्भ से दूसरे संदर्भ की दूसरी इकाई को जोड़ने की कोशिश कर रहा है।

यह InvalidOperationException (एकाधिक ट्रैकर्स में एक इकाई का उपयोग नहीं कर सकता) का मुखौटा, जो आमतौर पर मॉड्यूल सामग्री के बिना होता है।

मुझे 3 घंटे लगे हल करने के लिए, हो सकता है यह मदद करता है एक ही समस्या

संबंधित मुद्दे