ASP.NET 核心 AddDbContextPool 未触发 ChangeTracker 事件

ASP.NET Core AddDbContextPool not firing ChangeTracker events

我有一个使用 .NET Core 3.0 和 EF Core 3.0 的 ASP.NET Core 3.0 应用程序。我正在使用 AddDbContextPool 注册我的 DbContext:

services.AddDbContextPool<IMyDbContext, MyDbContext>(
            optionsAction: options => options.UseSqlServer(
                connectionString: Configuration.GetConnectionString("MyDatabase"))
        );

在我的 DbContext 构造函数中,我附加了 ChangeTracker 的两个事件:

public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
            // Attach to our important events
            ChangeTracker.StateChanged += ChangeTracker_StateChanged;
            ChangeTracker.Tracked += ChangeTracker_Tracked;
        }

我第一次 运行 应用程序在我将项目添加到我的上下文时触发事件。页面加载完成后,我发出另一个请求,但是这次在将项目添加到我的上下文时触发了 none 个事件。似乎当它从池中拉出上下文时,它不再注册事件处理程序。

我在使用常规 AddDbContext 时没有任何问题。这是预期的行为还是我应该以不同的方式注册我的事件处理程序?

这可能应该被认为是一个错误——你能把它提交到 https://github.com/aspnet/EntityFrameworkCore/issues

应将上下文实例重置为构造后的状态。但是,这对于事件来说可能很棘手。

最好的办法就是不要 AddDbContextPool。对于大多数情况,使用 AddEbContext 的性能差异可以忽略不计。