C# 什么';在实体框架中删除实体的正确方法是什么?

C# 什么';在实体框架中删除实体的正确方法是什么?,c#,.net,entity-framework,C#,.net,Entity Framework,我很难删除对象树。我的模型没有使用任何内置的级联删除机制,因此我必须执行每个相关实体的显式删除 我要删除的实体有3级间接寻址(导航属性) 类父类 { 公共ICollection子项{get;set;} } 班童 { 公共ICollection子代{get;set;} } 公家子弟 { } 我的DbContext是 public class Context { DbSet<Parent> Root {get; set;} DbSet<Grandchild

我很难删除对象树。我的模型没有使用任何内置的级联删除机制,因此我必须执行每个相关实体的显式删除

我要删除的实体有3级间接寻址(导航属性)

类父类
{
公共ICollection子项{get;set;}
}
班童
{
公共ICollection子代{get;set;}
}
公家子弟
{   
}
我的DbContext是

public class Context 
{
    DbSet<Parent> Root {get; set;}
    DbSet<Grandchild> Grandchildren {get; set;}
}
公共类上下文
{
DbSet根{get;set;}
DbSet孙子{get;set;}
}
请注意,上下文没有公开类
子类的DbSet


那么,删除父项下所有内容的正确方法是什么呢?

我想删除不需要的DbSet声明,然后迁移数据库就足够了。 PowerShell:

dotnet ef migrations add [name]
dotnet ef database update

编辑:如果您使用代码优先的方法,则上述方法适用。

首先您需要确保实体框架

那么你应该能够:

级联删除自动删除相关记录或将null设置为空 在数据库中删除父记录时的ForeignKey列

默认情况下,在实体框架中为所有类型启用级联删除 一对一、一对多、多对多等关系

因此,下面的代码应该删除每个子项

var parent = _dbContext.Single(predicate)
_dbContext.Remove(parent);
_dbContext.SaveChanges();

请向我们显示您当前的代码以删除谢谢您的回答,但我认为这对我不起作用。我使用的上下文是使用DB-First方法生成的,我无法控制它。每个相关实体生成一个导航属性和一个外键。我遇到如下错误:SqlException:DELETE语句与引用约束“FK_XXX_XXX”冲突。冲突发生在数据库“XXXX\u XXXX”、表“ABC”、列“ID\u XXXX”中。声明已终止。
var parent = _dbContext.Single(predicate)
_dbContext.Remove(parent);
_dbContext.SaveChanges();