【问题标题】:ASP.NET Core AddDbContextPool not firing ChangeTracker eventsASP.NET Core AddDbContextPool 未触发 ChangeTracker 事件
【发布时间】:2021-11-15 17:50:50
【问题描述】:

我有一个使用 .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;
        }

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

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

【问题讨论】:

    标签: c# asp.net-core ef-core-3.0


    【解决方案1】:

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

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

    最好的方法是不要AddDbContextPool。在大多数情况下,使用 AddEbContext 的性能差异可以忽略不计。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2012-05-06
    • 2023-03-05
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多