繁体   English   中英

在整个控制器中使用相同的DbContext,或者在需要时使用新的DbContext?

[英]Use the same DbContext in the entire controller, or use a new DbContext whenever need it?

我正在使用MVC .Net。 通常我总是使用类似下面的东西来创建一个实例,每当我需要查询数据库时:

using (EntitiesContext ctx = new EntitiesContext())
{
    ....
}

然后我看到很多示例代码在控制器中总是有一个DBContext实例,在需要时使用它,并在控制器处理时处理它。

我的问题是:哪一个是使用它的正确方法? 任何优势/劣势? 也许,有任何性能差异吗?

谢谢

通过控制器实例使用上下文具有多个优点:

  • 它的范围是控制器,因此如果您多次需要它,则只分配一个实例
  • EntityFramework使用本地缓存 ,然后如果您使用相同的参数在同一个DbSet上多次查询,它将匹配缓存中的那些实体而不是查询数据库
  • 如果使用存储库模式,则最好在存储库之间共享上下文。 这样,如果您在同一控制器范围内操作多个存储库,每个存储库都能够看到其他存储库所执行的操作

ASP.NET 5和Entity Framework 6入门 ,您可以阅读:

每个范围应解决一次上下文,以确保性能并确保实体框架的可靠运行。

查看相关的SO帖子 ,深刻解释为什么使用这种方法更好。

暂无
暂无

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

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