我正在编写一个MVC 5互联网应用程序&对于在不同控制器中使用相同的实例化DbContext
对象有疑问。
我想这样做,因为我正在不同的控制器中检索一些相同的数据,& DbContext
类的内置缓存功能将最大限度地减少许多数据库事务。
以下是一些解释的代码:
public class TestController1 : Controller
{
private CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext();
}
public class TestController2 : Controller
{
private CanFindLocationDatabaseContext db = new CanFindLocationDatabaseContext();
}
对此进行编码的最佳方法是什么?这有什么不利之处吗?每个用户应该拥有自己的DbContext对象,还是只有一个用户?在编码之前我应该注意什么? CRUD操作发生时是否会发生潜在冲突?
提前致谢。
答案 0 :(得分:0)
这可能会对你有所帮助,如果这是你要求或我能理解的。 您可以创建一个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
}
}
答案 1 :(得分:0)
您还可以使用类作为包装器并将静态引用放入dbcontext。
答案 2 :(得分:-1)
您不应该为所有控制器使用相同的dbContext。这样做不是一个好习惯,因为框架必须跟踪更多实体,如果EF方面出现问题,那么调试也很困难。 每个控制器类使用一个dbContext。