首页 > 解决方案 > 删除所有连接的子实体

问题描述

我一直在尝试从数据库中正确删除单个项目,以满足 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。

我看到两种可能的删除实体和子项的方法:

  1. 通过LINQ查询获取连接实体;
  2. 给我的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错误,不知道为什么。

第二

这仍然是一种方式,但我想暂停一段时间。因为我看到了,就像不太安全的方法一样。

所以,回到主题:如何在所有孩子连接的情况下删除我的实体?

标签: c#entity-frameworklinq

解决方案


最后,我选择对连接的实体设置级联删除约束


推荐阅读