我很难删除对象树。我的模型没有使用任何内置的级联删除机制,因此我必须对每个相关实体执行显式删除。
我要删除的实体具有3个间接级别(导航属性)
class Parent
{
public ICollection<Child> Children { get; set; }
}
class Child
{
public ICollection<Grandchild> Grandchildren { get; set; }
}
public class Grandchild
{
}
我的DbContext是
public class Context
{
DbSet<Parent> Root {get; set;}
DbSet<Grandchild> Grandchildren {get; set;}
}
请注意,上下文没有公开类Children
的DbSet。
那么,删除Parent
下的所有内容的正确方法是什么?
答案 0 :(得分:0)
首先,您需要确保实体框架has a Foreign Key。
那么您应该可以cascade delete:
级联删除自动删除相关记录或将null设置为 在数据库中删除父记录时的ForeignKey列。
默认情况下,实体框架中的所有类型都启用级联删除 一对一,一对多和多对多的关系。
因此以下代码应删除每个子对象
var parent = _dbContext.Single(predicate)
_dbContext.Remove(parent);
_dbContext.SaveChanges();
答案 1 :(得分:-1)
我想这足以删除不需要的DbSet <>声明,然后迁移数据库。 PowerShell:
dotnet ef migrations add [name]
dotnet ef database update
编辑:如果您使用代码优先的方法,则适用。