我們有一個應用程式在執行 ToList() 時導致空例外。我們將 Entity Framework 6 與 c# 和 .Net 4.6.1 一起使用。
變數名稱被重命名為通用名稱。如果我在語法上造成任何不一致,我深表歉意。它已經作業了很長時間,我剛剛看到了這個問題。代碼如下所示:
var mYOrdList = new List<Order>();
mYOrdList.Add(order);
var mYOrdQuery = mYOrdList.AsQueryable<Order>();
下面的鏈式陳述句包括 ToList(),它會拋出空例外。請注意,.ToOrderDetail() 的回傳值不是空的!
var orderDetailViewModel = mYOrderQry.ToOrderDetail().ToList().First();
下面的這段代碼顯示了 ToOrderDetail() 的開頭:
public static IQueryable<OrderDetailViewModel> ToOrderDetail(
this IQueryable<Order> orders)
{
return orders.Select(order => new OrderDetailViewModel
{
orderId = order.orderID,
...
我注意到,在手表中查看“訂單”物件中的資料時,該物件中的某些集合不可見并顯示為“X”。相關訊息是-“EntityFrameworkDynamic Proxies 的元資料 - OurDataLayer 無效。如果您正在執行小型轉儲,您可以通過收集帶有堆的新小型轉儲并再次評估運算式來解決此問題。”
我沒有在我的 c:\windows\minidump 檔案夾中找到 minidump。這對應于我的 %systemroot% 目錄。
有人可以建議嗎?
謝謝你,肯
uj5u.com熱心網友回復:
ToOrderDetail 回傳IQueryable,所以它當然不是#null。問題是ToList它將嘗試執行您的IQueryable問題所在。Null Reference 例外可能是您查詢訂單以填充 DTO 的代碼正試圖參考尚未預先加載的相關導航屬性。由于 EF 將使用跟蹤的物體填充參考的方式,即使沒有進行急切的加載呼叫,這似乎也會不一致地發生。如果DbContext已經在跟蹤一個訂單的問題中的相關實體,該呼叫將起作用,但如果您加載另一個訂單,其中一個或多個參考尚未被跟蹤并且未急切加載,那么如果延遲加載,您將獲得空參考'未啟用/可用。當 DTO 更改并且有人只是參考導航屬性而不檢查該屬性在呼叫該方法的所有情況下是否已預先加載時,這些錯誤往往會顯現出來。
首先運行mYOrderQry.ToList()并查找將由您的 DTOSelect陳述句參考的空導航屬性。要修復它,您需要確保這些參考是預先加載的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/435700.html
下一篇:ArgumentException:呼叫“DbSet<News>.Find”的位置0處的鍵值是“字串”型別,與int的屬性型別不匹配
