我有以下代码行:
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。
答案 0 :(得分:0)
你的这行代码是对的:
var y = userRep.All.FirstOrDefault(x => x.UserName == userName);
如果假设第二个userName为null,即使在这种情况下它也不会抛出异常,但如果查询返回null意味着没有找到记录,那么y
将为null并且当你将访问它或迭代它。
如果您没有实例化userRep
,它将抛出异常。
这样做,在查询数据库之前,保留你的dbcontext类名MyDbContext
var userRep = new MyDbContext();
答案 1 :(得分:0)
如果没有更多详细信息,并且理所当然地认为之前提出的任何答案都没有解决您的问题,我可以想到另一个可能的原因:&#34; userName&#34;变量(或您的示例中未显示的其他外部变量)正在被捕获&#34;并且,最终,某些东西正在改变它的价值。例如
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
答案 2 :(得分:0)
我得到了它,它与Glimpse和Entity Framework有关,我发现这个链接有详细信息:https://github.com/Glimpse/Glimpse/issues/766我必须将Entity Framework降级到6.0.2并且它现在可以正常工作。