簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM