NET Framework 4.7.2应用程序中的EF Core 2.1.1 DbContextPooling

时间:2018-07-30 09:00:14

标签: dbcontext .net-framework-version ef-core-2.1

我可以找到很多有关如何通过AddDbContextPool函数在ASP Net Core中启用DbContextPooling的文章。 但是当.Net framework 4.7.2不可用时,该怎么办。如何重用池中的DbContext?

谢谢

1 个答案:

答案 0 :(得分:1)

AddDbContextPool在依赖项注入容器中设置服务,以使其更有效地为每个请求获取DbContext实例。

如果您没有使用ASP.NET Core,但是您的应用程序遵循类似的模型(例如,DbContext实例需要处理Web或服务请求),并且每秒的请求数量很大,那么我的第一个建议是使用Microsoft.Extensions.DependencyInjection设置DI并像ASP.NET Core一样为每个请求创建DI作用域。完成此操作后,您应该能够像在ASP.NET Core应用程序中一样调用AddDbContextPool,并使用DI结合DbContext池的所有优点来解析DbContext。

除了该选项之外,理论上您可以手动执行AddDbContextPool achieves using DI

例如,首先创建一个DbContextPool类型的单例池。然后,对于您需要的YourDbContext的每个实例,请使用pool.Lease获取租约,然后使用lease.Context获取上下文。

在使用完上下文和租约后,必须确保同时处置它们。

注意事项:这种方法需要直接使用内部命名空间中的低级API,因此在将来任何EF Core的次要或主要版本中都可能更改或消失。

如果您的应用程序不能那样工作(例如,如果它不是需要处理大量请求的Web应用程序或Web服务),那么使用DbContext池就没有任何优势。