Entity framework 在EF core中禁用跟踪返回跟踪错误

Entity framework 在EF core中禁用跟踪返回跟踪错误,entity-framework,dbcontext,ef-core-2.0,Entity Framework,Dbcontext,Ef Core 2.0,我有这个存储库,您可以看到: public class TestCenterRepository:ITestCenterRepository { private readonly PetrolTestCenterDbContext _context; public TestCenterRepository(PetrolTestCenterDbContext context) { this._context =

我有这个存储库,您可以看到:

 public class TestCenterRepository:ITestCenterRepository
    {
        private readonly PetrolTestCenterDbContext _context;


        public TestCenterRepository(PetrolTestCenterDbContext context)
        {
            this._context = context;

        }
        public TestCenter GetById(Guid testCenterId)
            => _context.PetrolTestCenters.FirstOrDefault(u => u.Id == testCenterId && u.Deleted == false);

        public void Add(TestCenter testCenter)
        {
            _context.PetrolTestCenters.Add(testCenter);
            _context.SaveChanges();

        }
}
public class PetrolTestCenterDbContext : DbContext
{


public PetrolTestCenterDbContext(DbContextOptions<PetrolTestCenterDbContext> options) : base(options)
{
    ChangeTracker.LazyLoadingEnabled = false;
    ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;


}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.ApplyConfiguration(new TestCenterConfig());

}

public DbSet<TestCenter> PetrolTestCenters { get; set; }

}
调用add函数时,出现以下错误:

'The instance of entity type 'TestCenter' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.'
因此,我尝试在我的上下文中禁用跟踪,如您所见:

 public class TestCenterRepository:ITestCenterRepository
    {
        private readonly PetrolTestCenterDbContext _context;


        public TestCenterRepository(PetrolTestCenterDbContext context)
        {
            this._context = context;

        }
        public TestCenter GetById(Guid testCenterId)
            => _context.PetrolTestCenters.FirstOrDefault(u => u.Id == testCenterId && u.Deleted == false);

        public void Add(TestCenter testCenter)
        {
            _context.PetrolTestCenters.Add(testCenter);
            _context.SaveChanges();

        }
}
public class PetrolTestCenterDbContext : DbContext
{


public PetrolTestCenterDbContext(DbContextOptions<PetrolTestCenterDbContext> options) : base(options)
{
    ChangeTracker.LazyLoadingEnabled = false;
    ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;


}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.ApplyConfiguration(new TestCenterConfig());

}

public DbSet<TestCenter> PetrolTestCenters { get; set; }

}
公共类PetrolTestCenterDbContext:DbContext
{
公共PetrolTestCenterDbContext(DbContextOptions选项):基本(选项)
{
ChangeTracker.LazyLoadingEnabled=false;
ChangeTracker.QueryTrackingBehavior=QueryTrackingBehavior.NotTracking;
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
ApplyConfiguration(新的TestCenterConfig());
}
公共数据库集PetrolTestCenter{get;set;}
}

添加“禁用跟踪”后,我收到了相同的错误。

如何调用方法?因为如果在调用
GetById
之后调用
Add
方法,就会出现此错误。您不需要将对象添加回上下文,因为通过第一次拖动它,EF已经通过其主键跟踪此对象。您如何调用方法?因为如果在调用
GetById
之后调用
Add
方法,就会出现此错误。您不需要将对象添加回上下文,因为通过第一次拖动对象,EF已经通过其主键跟踪该对象。