如何关闭实体框架中的SQL连接?

时间:2013-09-26 23:13:27

标签: c# sql-server entity-framework asp.net-mvc-4 entity-framework-5

我将解释整个情况,以防任何人有一个比我得到的更好的解决方案。

首先,这些是我正在使用的技术:

SQL Server 2012
Entity Framework 5
ASP.NET MVC 4
Repository Pattern for EF5 developed by myself

我的代码的某些部分经常出现SQL Server的错误19(物理连接不存在)。从我的研究中我可以看出,我不能确保连接在使用后关闭。 我能找到的替代方案是:

  1. 使用关键字using
  2. 操作返回后关闭连接
  3. 我放弃了第一种方法,因为代码非常大,所以找到使用我的上下文并改变它的每个地方都是遥不可及的。

    所以我考虑使用第二种方法,我只需要创建一个属性来装饰我的控制器,每次action返回时我都会确保之后关闭/处理连接。我已经知道该怎么做了:

    public class MyAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            //code to get the current running connection
        }
    } 
    

    我的问题是:如何获取当前实体框架连接并从我的属性中关闭它?

    非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

控制器被实例化并由框架为每个动作调用处理。您可以在控制器的构造函数中安全地创建实体框架上下文,将其存储在控制器的字段中,并将其置于控制器的Dispose方法中。