繁体   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