跨不同控制器使用相同的 DbContext 对象
Using the same DbContext object across different controllers
我正在编写一个 MVC 5 互联网应用程序并且有一个关于跨不同控制器使用相同实例化 DbContext
对象的问题。
我想这样做是因为我在不同的控制器中检索一些相同的数据,并且 DbContext
class 的内置缓存功能将减少许多数据库事务。
这里有一些代码来解释:
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
}
}
您还可以使用 class 作为包装器并放置对 dbcontext 的静态引用。
您不应为所有控制器设置相同的 dbContext。这样做不是一个好的做法,因为这样框架必须跟踪更多的实体,如果 EF 端出现问题,也将很难调试。
每个控制器使用一个 dbContext class.
我正在编写一个 MVC 5 互联网应用程序并且有一个关于跨不同控制器使用相同实例化 DbContext
对象的问题。
我想这样做是因为我在不同的控制器中检索一些相同的数据,并且 DbContext
class 的内置缓存功能将减少许多数据库事务。
这里有一些代码来解释:
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
}
}
您还可以使用 class 作为包装器并放置对 dbcontext 的静态引用。
您不应为所有控制器设置相同的 dbContext。这样做不是一个好的做法,因为这样框架必须跟踪更多的实体,如果 EF 端出现问题,也将很难调试。 每个控制器使用一个 dbContext class.