在不同的控制器上使用相同的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操作发生时,是否会发生潜在的冲突?
这可能会帮助你,如果这是你想要的,或者我能理解。您可以创建一个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端出现问题,也很难调试。