我有一个列表<状态>的国家实体对象,每个状态对象都有其他对象的集合,如许可证,税金,债券等
还有一个ExpiredObjects的集合,它是任何已经过期且需要更新的对象的列表.由于某种原因,当我尝试访问一个特定状态(内华达州)时,这个属性给我一个NullReferenceException,但是对于我来说,我不知道实际上是什么,因为我没有看到任何空值任何地方.
这是我的代码抛出异常.它遍历所有状态,并将所有ExpiredObject添加到显示的视图特定集合中.我的测试代码仍然包含在内
- 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
当我选择内华达州,并且尝试将DataGrid绑定到ExpiredObjects集合(如果我注释该绑定,该代码工作正常),我也得到完全相同的错误
有谁知道可能导致这个错误?