编辑:这不是不了解基本编程的问题(例如试图取消引用空对象引用)。
编辑:在Linqpad中添加来自EF的堆栈跟踪。
使用EF6,我有一个非常简单的查询:
var menu = dbcontext.Tree.Where(t => t.Left > 2 && t.Right < 10).ToList();直到它神秘地停下来。dbcontext.Tree是Server 2012中的视图。使用Linqpad5,我可以使用它的内置连接获得预期的结果。建立一个EF连接到我的项目,我得到了NRE。通过检查SQL,我可以将其复制并粘贴到SQL查询窗口中,并获得适当的结果。我也得到了NRE而不需要打电话到哪里。
我已经尝试从数据库中更新我的模型来刷新任何东西。我尝试从模型中删除视图并进行更新。我试过完全删除模型并重新创建它。我重新启动了Visual和我的计算机。对于查询,我得到相同的NRE。我不知道我还能尝试什么,这个NRE对我来说毫无意义,因为我得到了预期的结果,除了EF。如果我以前没有看到它起作用的话,我会把它归因于EF的错误。
有人处理过这事吗?在网上搜索这一特定的情况没有产生任何结果。
堆栈跟踪:
at System.Data.Entity.Core.EntityKey.AddHashValue(Int32 hashCode, Object keyValue)
at System.Data.Entity.Core.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.Entity.Core.Objects.ObjectStateManager.TryGetEntityEntry(EntityKey key, EntityEntry& entry)
at System.Data.Entity.Core.Objects.ObjectStateManager.FindEntityEntry(EntityKey key)
at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()发布于 2016-09-22 15:53:41
问题是,您的模型(在上面的示例中是Tree)有一个或多个属性是不可空的(在映射中也可能标记为不可空),但是数据存储中相应的列是可空的。只有当检索到具有其中一列的null值的记录时,此异常才会显示出来。
Nullable<T>或?,如果您定义了映射(通过属性或继承EntityTypeConfiguration的类型),也要指定属性是可选的。https://stackoverflow.com/questions/39641813
复制相似问题