1

我正在使用实体框架开发一个 asp.net MVC4 应用程序。

我应该将我的实体的上下文保存在一个静态类中,以便只有一个点来创建我的上下文,还是应该在每个控制器中创建上下文?

我必须自己调用 Dispose() 还是从 GC 安全地完成(就像这里的第二个答案中所说的那样:是否应该将实体框架上下文放入 Using 语句?)。

如果我决定使用静态类,是否有一个安全点来处理上下文变量(“应用程序的结尾”)?

我的静态类的示例:

public static class ApplicationHelper
{
    static ApplicationHelper()
    {
        Db = new ApplicationEntities();
    }

    internal static readonly ApplicationEntities Db;
}
4

1 回答 1

2

上下文不被认为是线程安全的,因此将它放在静态变量中可能是个坏主意。此外,GC 会在您的上下文中调用 dispose,当它想要时,在您可能所有连接都用完之后的某个遥远的地方。换句话说,显式调用 Dispose。这通常使用using()语句来完成。

总而言之,您应该使用 DI 容器来注入您的上下文并以这种方式管理连接的生命周期,实现一个工作单元模式,该模式将通过存储库模式管理上下文生命周期,或者显式打开和关闭您的连接在控制器的操作方法中。

public ActionResult SomeAction()
{
 using( var db = new ApplicationEntities() )
 {
  //todo: use db
 }
 return View();
}
于 2013-04-08T09:45:55.060 回答