加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我在System.Data.Entity.dll(实体框架)中得到一个Nu

发布时间:2020-12-15 03:47:10 所属栏目:百科 来源:网络整理
导读:我有一个列表状态的国家实体对象,每个状态对象都有其他对象的集合,如许可证,税金,债券等 还有一个ExpiredObjects的集合,它是任何已经过期且需要更新的对象的列表.由于某种原因,当我尝试访问一个特定状态(内华达州)时,这个属性给我一个NullReferenceException
我有一个列表<状态>的国家实体对象,每个状态对象都有其他对象的集合,如许可证,税金,债券等

还有一个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:UsersmeDesktopMySolutionStatesViewModel.cs:line 217

当我选择内华达州,并且尝试将DataGrid绑定到ExpiredObjects集合(如果我注释该绑定,该代码工作正常),我也得到完全相同的错误

有谁知道可能导致这个错误?

解决方法

如果只是内华达,那么它必须是数据问题,请仔细检查数据库.

总而言之,核心问题是:

>这是db-first.> …正在为在EF中标记为不为空的字段之一返回一个空值

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读