繁体   English   中英

Entity Framework 6 查询生成 NullReferenceException

[英]Entity Framework 6 query generates NullReferenceException

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

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

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

  • 模型修复 - 更新模型时确保使用Nullable<T>? 对于可为 null 的值类型,并且如果您定义了映射(通过属性或在继承EntityTypeConfiguration类型中)还指定该属性是可选的。
  • 数据存储修复 - 或者更改数据存储架构和数据,使其与模型中的预期一致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM