修复 Entity Framework 内的删除问题

Fixing an issue of deletion within Entity Framework

我有这个方法:

 public async void Delete(params T[] items)
 {
     using (var context = new DataEntities())
     {
         foreach (T item in items)
         {
             context.Entry(item).State = System.Data.Entity.EntityState.Deleted;
         }

         await context.SaveChangesAsync();
     }
}

当我试图删除一个项目时:

dpc_participant part = (await SimpleIoc.Default.GetInstance<ICrud<dpc_participant>>().Search(x => x.dpc_id_participant_pk == currentitem.dpc_id_participant_pk && x.dpc_id_fk == currentitem.dpc_id_pk)).FirstOrDefault();
SimpleIoc.Default.GetInstance<ICrud<dpc_participant>>().Delete(part);

我遇到了这个错误

entity object cannot be referenced by multiple instances of IEntityChangeTracker.

问题:

  1. 这个错误的原因是什么?
  2. 我该如何解决?

发生这种情况是因为您的 items 变量连接到与您的函数正在使用的上下文不同的上下文。

要修复,要么将您检索项目时使用的原始上下文传递到此函数中并使用它,要么使用函数中的新上下文重新查询它们,然后删除。