跨不同控制器使用相同的 DbContext 对象

Using the same DbContext object across different controllers

我正在编写一个 MVC 5 互联网应用程序并且有一个关于跨不同控制器使用相同实例化 DbContext 对象的问题。

我想这样做是因为我在不同的控制器中检索一些相同的数据,并且 DbContext class 的内置缓存功能将减少许多数据库事务。

这里有一些代码来解释:

public class TestController1 : Controller
{
    private CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext();
}

public class TestController2 : Controller
{
    private CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext();
}

编写此代码的最佳方法是什么?这样做有什么缺点吗?每个用户应该有自己的 DbContext 对象,还是所有用户只有一个?在编码之前我应该​​注意什么? CRUD 操作发生时是否会发生潜在冲突?

提前致谢。

这可能对你有帮助,如果这是你问的或者我能理解。 您可以创建一个 BaseController,您可以在其中创建 DbContext 实例。之后就可以在每个Controller中继承这个Basecontroller了。

public class BaseController : Controller
{
  public BaseController()
  {
     CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext();
  }
}

现在像这样在所有控制器中继承它:

public class YourController:BaseController
{
    public ActionResult Hello()
    {
      //us your db instance here now
    }

}

您还可以使用 class 作为包装器并放置对 dbcontext 的静态引用。

您不应为所有控制器设置相同的 dbContext。这样做不是一个好的做法,因为这样框架必须跟踪更多的实体,如果 EF 端出现问题,也将很难调试。 每个控制器使用一个 dbContext class.