在Entity Framework中删除实体的正确方法是什么?

时间:2019-08-08 09:51:47

标签: c# .net entity-framework

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

我要删除的实体具有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下的所有内容的正确方法是什么?

2 个答案:

答案 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

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