繁体   English   中英

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

[英]Using the same DbContext object across different controllers

我正在编写MVC 5 Internet应用程序,并且在跨不同的控制器使用相同的实例化DbContext对象时遇到问题。

我想要这样做是因为我正在不同的控制器中检索某些相同的数据,并且DbContext类的内置缓存功能将使许多数据库事务最小化。

这是一些代码来解释:

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
    }

}

您还可以将类用作包装器,并为dbcontext放置静态引用。

对于所有控制器,您不应具有相同的dbContext。 这样做不是一个好习惯,因为那样一来,框架必须跟踪更多的实体,并且如果EF方面出现问题,也将很难调试。 每个控制器类使用一个dbContext。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM