我正在try 使用EF代码优先删除数据库记录(deleteMe)及其子记录(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();

但是,实体框架似乎无法跟踪子记录应该在父记录之前删除的事实.我得到了错误:

DELETE语句与引用约束"ItemPrice_Item"冲突

我将如何在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();

Database相关问答推荐

如何在同一个表的派生部分引用主键?

用于在 Excel 中的两个列表之间进行筛选的辅助列

获取总和列的比率

Spring Data JPA 对 SQL 注入安全吗

如何在 SQL Server 中将索引从一个表复制到另一个表

更新数据库后如何更新redis?

android 应用程序与 web 服务通信的安全性

WAMP 的 MySQL 数据库文件位于何处?

Android Room持久性库@Update不起作用

Postgres - 如何返回缺失数据计数为 0 的行?

如何在 2 个 MySQL 数据库之间传输数据?

将图像文件存储在 Mongo 数据库中,这是个好主意吗?

免费的便携式数据库有哪些?

使用 JSON 作为存储/传输格式的数据库

为 Java servlet 管理数据库连接的最佳方法

如何用 SQL 思考?

将 .csv 文件导入 Android 中的 Sqlite

Twisted + SQLAlchemy 和最好的方法

有哪些不同类型的索引,每种索引的好处是什么?

Data Mapper 是不是比 Active Record 更现代的趋势