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已经通过其主键跟踪该对象。