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
的性能差异可以忽略不计。
我有一个使用 .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
的性能差异可以忽略不计。