首页 > 解决方案 > C# EF 核心批量插入给出错误无法跟踪实体类型“实体”的实例,因为另一个具有相同键的实例

问题描述

我想在 EF Core 的单个事务中插入一组记录。我是 EF Core 的新手。但是在循环的第二次迭代中添加实体时出现以下异常:

无法跟踪实体类型“Entity”的实例,因为已经在跟踪另一个具有相同 {'Id'} 键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”来查看冲突的键值。

我使用了工作单元和存储库模式。

这是创建代码块

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);
}

我已经对我的上下文创建服务进行了以下更改,但仍然出现错误。

 services.AddDbContext<OnlineFeedbackContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TRMDatabase")).UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking));
 services.AddScoped<OnlineFeedbackContext>();

标签: c#entity-framework-core

解决方案


推荐阅读