c# - 删除所有连接的子实体
问题描述
我一直在尝试从数据库中正确删除单个项目,以满足 FK 限制。
我得到了由多个其他人引用的项目实体(用于在 EF 中使用)
public class Item
{
public int Id {get; set;}
...
public FoodItem FoodItem { get; set; }
public LocalItem LocalItem { get; set; }
public ItemToCategory ItemToCategory { get; set; }
}
其中Id是项目的 PK和其他实体的 FK。
我看到两种可能的删除实体和子项的方法:
- 通过LINQ查询获取连接实体;
- 给我的Item提供 CascadeDelete约束。
首先:
到目前为止,我发现我的查询必须像
Item basicItem = await db.Items.Include(b => b.LocalItem)
.Include(b => b.FoodItem)
.Include(b => b.ItemToCategory)
.SingleOrDefaultAsync(p => p.Id == productId);
db.Items.Remove(basicItem);
await db.SaveChangesAsync();
但我得到Source sequence contains more than one element
错误,不知道为什么。
第二:
这仍然是一种方式,但我想暂停一段时间。因为我看到了,就像不太安全的方法一样。
所以,回到主题:如何在所有孩子连接的情况下删除我的实体?
解决方案
最后,我选择对连接的实体设置级联删除约束
推荐阅读
- mysql - AWS RDS - 使用 GRANT ALL PRIVILEGES ON the_db.* TO 'the_user'@'%' 时拒绝管理员用户访问
- postgresql - plpgsql我如何修复回报
- python-3.x - 是否有任何模式可以单独更新 kivy 窗口?
- php - 从windows添加linux mysql记录,0xae令人困惑
- python - 正则表达式没有正确替换预期结果python
- kubernetes - 如何在 Kubernetes 服务端点级别获取请求计数
- javascript - 将 Vue.js 与 Vite 一起使用时,只需一个函数调用就发出 400 个请求
- r - 如何使列存在于r中?
- discord - 为什么 client.users.cache 只显示 2 个用户 discord.js
- apache-kafka - Scala:无法解析重载方法(Flink WatermarkStrategy)