为什么我无法获得填充IQueryable的第一个元素?

时间:2014-04-18 12:08:53

标签: c# linq iqueryable

    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但未在用户代码中处理附加信息:   执行命令定义时发生错误。见   细节的内在例外。

我无法理解错误,甚至比我能理解的更糟糕。有谁知道为什么会这样?

3 个答案:

答案 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提示,这使我的代码看起来更好。