对于Asp.net核心应用程序,我们必须使用哪一个? AddDbContext
或AddDbContextPool
?根据EF Core文档,AddDbContextPool
提供了高性能,但默认的Asp.net Core项目模板使用AddDbContext
。
答案 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)
AddDbContext
和AddDbContextPool
之间有以下区别
AddDbContext()
或AddDbContextPool()
方法
向ASP.NET注册我们的应用程序特定的DbContext类
核心依赖注入系统。AddDbContext()
和AddDbContextPool()
之间的区别
方法是AddDbContextPool()
方法提供DbContext池。AddDbContextPool()
方法优于AddDbContext()
方法。AddDbContextPool()
方法是ASP.NET Core 2.0中引入的。因此,如果
您正在使用ASP.NET Core 2.0或更高版本,请使用AddDbContextPool()
方法胜过AddDbContext()
方法。