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

本文关键字:DbContext 对象 控制器 | 更新日期: 2023-09-27 17:49:43

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

我想这样做,因为我正在检索一些相同的数据在不同的控制器,&DbContext类的内置缓存特性将最小化许多数据库事务。

下面是一些代码来解释:
public class TestController1 : Controller
{
    private CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext();
}
public class TestController2 : Controller
{
    private CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext();
}

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

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

这可能会帮助你,如果这是你想要的,或者我能理解。您可以创建一个BaseController,并在其中创建DbContext实例。之后,你可以在每个控制器中继承这个bascontroller。

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

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

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

您还可以使用类作为包装器,并向dbcontext添加静态引用。

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