簡體   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