实体框架 - 删除级联

时间:2015-08-18 06:27:02

标签: c# entity-framework-6

当我创建我的DbContext时,我希望我的数据库中的所有表都启用了delete-cascade。有可能吗?

我有两张FK表。这些课程是

public class Child
{
    public int ChildID { get; set; }
    public string Name { get; set; }
    public virtual Parent parent { get; set; }
}

public class Parent
{
    public int ParentID { get; set; }
    public string Name {get;set;}        
}       

public class iMyContext : DbContext
{
    public iMyContext(string connectionString)
        : base(connectionString)
        {
        }


    public virtual DbSet<Child> Children { get; set; }
    public virtual DbSet<Parent> Parents { get; set; }  
}

On creating my context, I get tables as

Parents with columns
ParentID PK
Name

Children with columns
ChildID PK
Name
Parent FK

现在我添加

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Child>()
        .HasOptional(r => r.Parent)
        .WithRequired(ad => ad.)   // problem here
        .WillCascadeOnDelete();

    }

WithRequired子句没有Child。我该如何解决?

1 个答案:

答案 0 :(得分:1)

可以使用OnModelCreating方法中的FluentAPI设置级联删除:

modelBuilder.Entity<Root>()
            .HasMany(r => r.Nodes)
            .WithRequired(n => n.Root)
            .WillCascadeOnDelete();

<强> UPD: 让我们假设您有两个实体Root和Node,它们使用DataAnnotations属性与一对多关系连接:

public class Root
{
    [Key]
    public int RootId { get; set; }

    public string RootName { get; set; }

    [InverseProperty("Root")]
    public ICollection<Node> Nodes { get; set; }
}

public class Node
{
    [Key]
    public int NodeId { get; set; }

    public string NodeName { get; set; }

    [ForeignKey("Root")]
    public int RootId { get; set; }

    public Root Root { get; set; }
}

现在,如果要在删除所依赖的Root的同时删除所有节点,则需要使用上面介绍的UPD之前的代码,在上下文配置类的OnModelCreating方法中使用FluenAPI进行配置。