protected Server getServerByName(string name)
{
var servers = from qServer in db.Servers
where qServer.Name == name
select qServer;
if (servers.Count() > 0)
{
return servers.First(); // The error occurs on this line
}
return null;
}
此代码到目前为止一直按预期工作,但是今天突然开始出现此错误:
类型的例外 ' System.Data.Entity.Core.EntityCommandExecutionException'发生在 mscorlib.dll但未在用户代码中处理附加信息: 执行命令定义时发生错误。见 细节的内在例外。
我无法理解错误,甚至比我能理解的更糟糕。有谁知道为什么会这样?
答案 0 :(得分:2)
虽然这并没有直接回答您的问题,但是当您执行两个SQL查询时,您的代码效率很低。您应该使用FirstOrDefault()
代替,如果找不到服务器,则会返回null
。
protected Server getServerByName(string name)
{
var servers = from qServer in db.Servers
where qServer.Name == name
select qServer;
return servers.FirstOrDefault();
}
尝试这种简化,看看原始问题是否消失。
答案 1 :(得分:1)
使用 FirstOrDefault()如果没有可用的记录,它将不会抛出异常。
return servers.FirstOrDefault();
如果没有可用的项目,它将只返回null
。
答案 2 :(得分:0)
在检查了InnerException之后,我发现我没有将最后一次模型更改迁移到数据库(EF CodeFirst)。这暴露了我在模型中添加了一个列而没有这样做到数据库,因此它不会获得该对象。
通过迁移修复,虽然我要感谢martin_costello和Ehsan Sajjad的FirstOrDefault提示,这使我的代码看起来更好。