![](/img/trans.png)
[英]Object Reference Not set to instance of an object error while using FirstOrDefault
[英]FirstOrDefault() throws Object reference not set to an instance of an object error
我有以下代碼行:
var y = userRep.All.FirstOrDefault(x => x.UserName == userName);
userRep是一個存儲庫類,All方法定義為
public IQueryable<User> All
{
get { return _context.Users; }
}
使用調試器將userName傳遞到函數中,我可以驗證它是否具有值。 每當我運行該行代碼時,都會出現錯誤:
對象引用未設置為對象錯誤的實例。
如果我將條件硬編碼為x.UserName == "abc"
它可以正常工作,但是我不確定為什么當調試器顯示其中有一個值時,它一直認為userName為null。
您這行代碼是正確的:
var y = userRep.All.FirstOrDefault(x => x.UserName == userName);
如果假設第二個userName為null,即使在那種情況下也不會引發異常,但是如果查詢返回null意味着找不到記錄,則y
將為null,並且在您訪問它或對其進行迭代時它將通過異常。
如果您尚未實例化userRep
,它將拋出異常。
這樣,在查詢數據庫之前,先確保您的dbcontext類名稱為MyDbContext
var userRep = new MyDbContext();
如果沒有更多細節,並且認為以前提出的任何答案都不能解決您的問題,我可以想到另一個可能的原因:“ userName”變量(或示例中未顯示的其他外部變量)正在“被捕獲” ”,並最終改變了它的價值。 例如
var y = userRep.All.FirstOrDefault(x => x.UserName == userName);
...
userName = null;
...
foreach(var x in y){...}
在此處閱讀有關此內容的更多信息http://blogs.msdn.com/b/matt/archive/2008/03/01/understanding-variable-capturing-in-c.aspx
我成功了,它與Glimpse和Entity Framework有關,我發現了此鏈接的詳細信息: https : //github.com/Glimpse/Glimpse/issues/766我必須將Entity Framework降級到6.0.2,並且它可以正常工作現在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.