如何解决连接未关闭。连接的当前状态正在连接?

时间:2019-08-28 08:29:30

标签: c# asp.net-mvc

在启动项目之前,我没有收到任何错误,但是在启动项目时出现了此错误

  

连接未关闭。连接的当前状态为正在连接。

此代码中有错误

public class RoleMenu{
   private DBContext db = new DBContext();
   public List<Menu> GetList_Menu_ByRole(Role role)
   {
        List<RoleMenu> roleMenus = db.RoleMenus.Include(u => u.Role).Include(u => u.Menu).ToList(); //error is here
        List<Menu> roles = new List<Menu>();
        foreach (var eachRoleMenu in roleMenus)
        {
              if (eachRoleMenu.RoleID == role.ID)
              {
                  roles.Add(eachRoleMenu.Menu);
              }
        }
        return roles;
  }
}

这是我的web.config

  <add name="DBContext" connectionString="Data Source=DESKTOP-SRRO03Q;Initial Catalog=Project1;Integrated Security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />

如何解决此错误?谢谢,

1 个答案:

答案 0 :(得分:1)

这仍然没有显示正确的错误源, 但总的来说,除非在极少数情况下,否则我永远不会保留DBContext的私有变量。您需要使您的类RoleMenu实现IDisposable并正确使用它。

我建议您为每个查询使用一个上下文,例如:

public class RoleMenu
{
    public List<Menu> GetList_Menu_ByRole(Role role)
    {
        using (DBContext db = new DBContext())
        {
            List<RoleMenu> roleMenus = db.RoleMenus.Include(u => u.Role).Include(u => u.Menu).ToList(); //error is here
            List<Menu> roles = new List<Menu>();
            foreach (var eachRoleMenu in roleMenus)
            {
                if (eachRoleMenu.RoleID == role.ID)
                {
                    roles.Add(eachRoleMenu.Menu);
                }
            }

            return roles;
        }
    }
}