我正在尝试使用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();