EntityException发生在EntityFramework.SqlServer.dll中

时间:2016-06-08 05:20:16

标签: asp.net sql-server asp.net-mvc entity-framework linq

我的控制器代码

   ParaEntities db = new ParaEntities();
    public List<Client> GetAllClients()
    {
        return db.Client.ToList();
    }

Please click this link to see the error message

奇怪的是,当我第一次点击按钮获取所有客户信息时,它会响应500.在第二次,我点击按钮获取所有客户端,这是成功的。

3 个答案:

答案 0 :(得分:1)

您应该分配变量并在View中显示数据。 请在下面写下来更改语法。

ParaEntities db = new ParaEntities();
public List<Client> GetAllClients()
{
    var getData= db.Client.ToList();
       if(getData==null)
           {
               return null;
            }
    return getData;
}

答案 1 :(得分:0)

请试试这个

public List<Client> GetAllClients() { ParaEntities db = new ParaEntities(); return db.Client.ToList(); }

答案 2 :(得分:0)

此错误指向连接问题,而不是代码问题。检查connectionstring是否有效以及connectionstring中指定的用户是否可以访问数据库。如果您在IIS上运行该应用程序,请确保applicationpool用户可以访问该数据库。 Here是他们解决了这个错误的另一个问题。

如果要将db上下文存储为控制器类中的本地变量,那么我建议您在控制器构造函数中实例化它。然后确保每次创建控制器实例时都会创建新的db上下文。 让我们说你的控制器namned ClientController

private ParaEntities db;
public ClientController()
{
    this.db = new ParaEntities();
}

public List<Client> GetAllClients()
{
   return db.Client.ToList();
}

另一种方法是将db上下文包装在方法内的using语句中。在这种情况下,您确保该方法在被调用时使用了新的上下文,并且在操作完成时正在处理上下文。

public List<Client> GetAllClients()
{
    using(ParaEntities db = new ParaEntities())
    {
       return db.Client.ToList();
    }
}

PS:这两个例子都违反了依赖倒置原则(硬连接到db上下文),但那是另一天