我可以找到很多有关如何通过AddDbContextPool函数在ASP Net Core中启用DbContextPooling的文章。 但是当.Net framework 4.7.2不可用时,该怎么办。如何重用池中的DbContext?
谢谢
答案 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池就没有任何优势。