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

EF Core 2.1.1 DbContextPooling in .Net Framework 4.7.2 application

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

谢谢

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

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

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

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

您必须确保在使用完上下文和租约后释放它们。

警告:此方法需要直接使用内部命名空间中的低级 API,因此可能会在未来的任何次要或主要 EF Core 版本中更改或消失。

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