首页 新闻 会员 周边

如何彻底关闭 EF Core 的实体状态跟踪

0
悬赏园豆:30 [已解决问题] 解决于 2026-02-22 19:34

在 CQRS 的实现场景中,想针对 Query 使用专门的 readonly DBContext,请问如何彻底关闭 EF Core 的实体状态跟踪?

dudu的主页 dudu | 高人七级 | 园豆:23476
提问于:2026-02-22 18:29
< >
分享
最佳答案
0

设置 QueryTrackingBehavior.NoTracking 即可,有两种设置方法

方法1:在向依赖注入容器注册 DbContext 时设置

services.AddDbContextPool<ReadOnlyDbContext>(
    options =>
    {
        options.UseSqlServer(GlobalSettings.ConnectionString);
        options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
    });

方法2:在 DbContext 的构造函数中设置

public class ReadOnlyDbContext : DbContext
{
    public ReadOnlyDbContext(DbContextOptions<ReadOnlyDbContext> options)
        : base(options)
    {
        ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
    }
}
dudu | 高人七级 |园豆:23476 | 2026-02-22 19:32

更进一步地可以关闭 AutoDetectChanges

public class ReadOnlyDbContext : DbContext
{
    public ReadOnlyDbContext(DbContextOptions<ReadOnlyDbContext> options)
        : base(options)
    {
        ChangeTracker.AutoDetectChangesEnabled = false;
    }
}
dudu | 园豆:23476 (高人七级) | 2026-02-22 19:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册