AddDbContext或AddDbContextPool

时间:2018-01-25 13:03:41

标签: asp.net-core entity-framework-core asp.net-core-2.0

对于Asp.net核心应用程序,我们必须使用哪一个? AddDbContextAddDbContextPool?根据EF Core文档,AddDbContextPool提供了高性能,但默认的Asp.net Core项目模板使用AddDbContext

2 个答案:

答案 0 :(得分:33)

答案在这里(在“DbContext池”下):https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#dbcontext-pooling

DbContext不是线程安全的。因此,您不能同时为多个查询重用相同的DbContext对象(发生奇怪的事情)。通常的解决方案是每次需要时创建一个新的DbContext对象。这就是AddDbContext所做的。

但是,在先前的查询已经完成之后重用DbContext对象没有任何问题。这就是AddDbContextPool的作用。它使多个DbContext个对象保持活动状态并为您提供一个未使用的对象,而不是每次都创建一个新对象。

您使用哪一个取决于您。两者都有效。池化有一些性能提升。但是,文档警告说,如果您在DbContext类中使用不应在查询之间共享的任何私有属性,则不应使用它。我想这很少见,所以在大多数情况下合并应该是合适的。

答案 1 :(得分:2)

AddDbContextAddDbContextPool之间有以下区别

  1. 我们可以使用AddDbContext()AddDbContextPool()方法 向ASP.NET注册我们的应用程序特定的DbContext类 核心依赖注入系统。
  2. AddDbContext()AddDbContextPool()之间的区别 方法是AddDbContextPool()方法提供DbContext池。
  3. 通过DbContext池,DbContext池中的一个实例是 提供(如果可用),而不是创建一个新实例。
  4. DbContext池在概念上类似于连接池的方式 在ADO.NET中工作。从性能角度来看AddDbContextPool() 方法优于AddDbContext()方法。
  5. AddDbContextPool()方法是ASP.NET Core 2.0中引入的。因此,如果 您正在使用ASP.NET Core 2.0或更高版本,请使用AddDbContextPool() 方法胜过AddDbContext()方法。