编辑:这不是基本编程无知的问题(例如尝试取消引用空对象引用)。
编辑:在Linqpad中添加了来自EF的堆栈跟踪。
使用EF6,我有一个非常简单的查询:
var menu = dbcontext.Tree.Where(t => t.Left > 2 && t.Right < 10).ToList();
这一直有效,直到它神秘地停止。 dbcontext.Tree
是SQL Server 2012中的一个视图。使用Linqpad5,我得到了我期望使用其内置连接的结果。设置与我的项目的EF连接,我得到了NRE。检查SQL,我可以将其复制并粘贴到SQL查询窗口中,并获得正确的结果。我也得到了一个没有Where调用的NRE。
我尝试从数据库更新我的模型以刷新任何内容。我尝试从模型中删除视图并进行更新。我尝试完全删除模型并重新创建它。我重新启动了Visual Studio和我的电脑。我为查询得到了相同的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()
答案 0 :(得分:0)
问题是您的模型(上例中的Tree
)有一个或多个不可为空的属性(并且可能还在映射中标记为不可为空<)> 但数据存储中的相应列可以为空。只有在检索到其中一个列具有null
值的记录时,此异常才会显现。
Nullable<T>
或?
作为可空值类型,并且如果已定义映射(通过属性或继承{{1>的类型}} )还指定该属性是可选的。