![](/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.