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

时间:2016-04-18 22:25:34

标签: c# asp.net-mvc entity-framework

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

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

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

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

由于

1 个答案:

答案 0 :(得分:3)

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

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

Getting Started with ASP.NET 5 and Entity Framework 6,您可以阅读:

  

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

请参阅相关的SO post,深入解释为什么使用此方法会更好。