我正在尝试使用EF代码优先删除数据库记录(deleteMe)和它的 child (deleteMe.Prices)。

foreach (var deleteMe in deleteThese)
{
   // Delete validation
   if(CanDeleteItem(deleteMe.ItemId))
   {
      db.Entry(deleteMe).State = EntityState.Deleted;

      foreach (var item in deleteMe.Prices)
      {
         db.Entry(item).State = EntityState.Deleted; // cascade delete
      }
   }
}
db.SaveChanges();

但是, Entity Framework 似乎无法跟踪以下事实:应在父记录之前删除子记录。我得到错误:



如何在EF中执行此删除?

最佳答案

我最终找到一条捷径可以帮我做到这一点:

foreach (var deleteMe in deleteThese)
{
   // Delete validation
   if(CanDeleteItem(deleteMe.ItemId))
   {
      ///
      deleteMe.Prices.ToList().ForEach(p => db.ItemPrices.Remove(p));
      ///

      db.Entry(deleteMe).State = EntityState.Deleted;
   }
}
db.SaveChanges();

10-05 19:55