为什么可以';我没有得到填充IQueryable的第一个元素吗
本文关键字:IQueryable 填充 第一个 元素 为什么 | 更新日期: 2023-09-27 17:58:58
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,但未在用户代码中处理其他信息:执行命令定义时出错。请参阅有关详细信息的内部异常。
我无法理解这个错误,甚至无法理解这是怎么发生的。有人知道为什么会发生这种事吗?
虽然这不能直接回答您的问题,但您的代码在执行两个SQL查询时效率低下。您应该使用FirstOrDefault()
,如果找不到服务器,它将返回null
。
protected Server getServerByName(string name)
{
var servers = from qServer in db.Servers
where qServer.Name == name
select qServer;
return servers.FirstOrDefault();
}
尝试这种简化,看看原来的问题是否消失了。
使用FirstOrDefault((如果没有可用的记录,它不会抛出异常。
return servers.FirstOrDefault();
如果没有可用的项目,它将简单地返回null
。
检查InnerException后,我发现我没有将最后一次模型更改迁移到数据库(EF CodeFirst(。这暴露了我在没有向数据库添加列的情况下向模型添加了列,因此它无法获得对象。
通过迁移修复了问题,尽管我要感谢martin_costello和Ehsan Sajjad提供的FirstOrDefault提示,这让我的代码看起来更好。