如何在Entity Framework CF之前删除子实体? [英] How to delete child entities before parent with Entity Framework CF?

查看:126
本文介绍了如何在Entity Framework CF之前删除子实体?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用EF代码,首先删除一个数据库记录( deleteMe )和它的孩子( deleteMe.Prices )。

I am trying to use EF code-first to delete a db record (deleteMe) and it's children (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似乎无法跟踪子记录应该在父母。我收到错误:

However, Entity Framework seems to be unable to track the fact that the child records should be deleted before the parent. I get the error:


DELETE语句与REFERENCE约束ItemPrice_Item冲突。

冲突发生在数据库DEVDB,表dbo.ItemPrices,
列Item_ItemId。

语句已终止。

The DELETE statement conflicted with the REFERENCE constraint "ItemPrice_Item".
The conflict occurred in database "DEVDB", table "dbo.ItemPrices", column 'Item_ItemId'.
The statement has been terminated.

我如何在EF中执行这个删除?

How would I execute this delete in EF?

推荐答案

d为我做:

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

这篇关于如何在Entity Framework CF之前删除子实体?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆