修复了Entity Framework中的删除问题

时间:2015-02-27 17:27:55

标签: c# .net wpf entity-framework asynchronous

我有这个方法:

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

我收到了这个错误

  

实体对象不能被IEntityChangeTracker的多个实例引用。

问题:

  1. 出现此错误的原因是什么?
  2. 我该如何解决?

1 个答案:

答案 0 :(得分:1)

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

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