C#EF core bulk insert为实体类型';实体';无法跟踪,因为另一个实例具有相同的密钥
我想在EF Core中的单个事务中插入一组记录。我是EF Core的新手。但在循环的第二次迭代中添加实体时,我会遇到以下异常: 无法跟踪实体类型“entity”的实例,因为已在跟踪另一个具有{Id}相同键值的实例。附着现有实体时,请确保仅附着一个具有给定键值的实体实例。考虑使用“dBraveTopStudioBuffel.EnabelSythViDeAtCug”来查看冲突的键值。 我使用了工作单元和存储库模式 这是创建代码块C#EF core bulk insert为实体类型';实体';无法跟踪,因为另一个实例具有相同的密钥,c#,entity-framework-core,C#,Entity Framework Core,我想在EF Core中的单个事务中插入一组记录。我是EF Core的新手。但在循环的第二次迭代中添加实体时,我会遇到以下异常: 无法跟踪实体类型“entity”的实例,因为已在跟踪另一个具有{Id}相同键值的实例。附着现有实体时,请确保仅附着一个具有给定键值的实体实例。考虑使用“dBraveTopStudioBuffel.EnabelSythViDeAtCug”来查看冲突的键值。 我使用了工作单元和存储库模式 这是创建代码块 if (_trmshedulePlan.Count > 0) {
if (_trmshedulePlan.Count > 0)
{
foreach (var item in _trmshedulePlan)
{
_trmShedulePlanRepository.Create(item);
}
_unitOfWork.Commit();
}
这是我的创建方法:
public void Create(T entity)
{
this.TRMContext.Entry(entity).State = EntityState.Detached;
this.TRMContext.Set<T>().Add(entity);
}
public void创建(T实体)
{
this.TRMContext.Entry(entity).State=EntityState.Detached;
this.TRMContext.Set().Add(实体);
}
我对我的上下文创建服务做了以下更改,但仍然出现上述错误
services.AddDbContext<OnlineFeedbackContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TRMDatabase")).UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking));
services.AddScoped<OnlineFeedbackContext>();
services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString(“TRMDatabase”)).UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking));
services.addScope();
这表示您添加的两个项在属性Id
中具有相同的值,并且该属性是主键。修复源数据中的重复值。此代码This.TRMContext.Entry(entity).State=EntityState.Detached代码>可能会导致问题。