Entity Framework 6查询生成NullReferenceException

时间:2016-09-22 14:26:51

标签: sql-server entity-framework-6 nullreferenceexception ef-database-first

编辑:这不是基本编程无知的问题(例如尝试取消引用空对象引用)。​​

编辑:在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()

1 个答案:

答案 0 :(得分:0)

问题是您的模型(上例中的Tree)有一个或多个不可为空的属性(并且可能还在映射中标记为不可为空<)> 数据存储中的相应列可以为空。只有在检索到其中一个列具有null值的记录时,此异常才会显现。

  • 模型修复 - 更新模型时,请确保使用Nullable<T>?作为可空值类型,并且如果已定义映射(通过属性或继承{{1>的类型}} )还指定该属性是可选的。
  • 数据存储修复 - 或者更改数据存储架构和数据,使其与模型中的预期对齐。