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

时间:2015-05-19 04:54:14

标签: c# controller asp.net-mvc-5 entity-framework-6 dbcontext

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

我想这样做,因为我正在不同的控制器中检索一些相同的数据,& DbContext类的内置缓存功能将最大限度地减少许多数据库事务。

以下是一些解释的代码:

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

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

对此进行编码的最佳方法是什么?这有什么不利之处吗?每个用户应该拥有自己的DbContext对象,还是只有一个用户?在编码之前我应该​​注意什么? CRUD操作发生时是否会发生潜在冲突?

提前致谢。

3 个答案:

答案 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。