WillCascadeOnDelete不会在数据库上建立级联删除

时间:2013-10-30 09:00:30

标签: entity-framework

我不知道我是否遗漏了一些明显的东西。我们在一个项目中使用Entity Framework 6.0.0-rc1,该项目使用流畅的API设置模型。我们的一个实体的配置可能是:

HasMany(t => t.Entity)
 .WithRequired(tc => tc.ParentEntity)
 .HasForeignKey(tc => new {tc.Key1, tc.Key2})
 .WillCascadeOnDelete(true);

运行此配置时,将正确创建数据库,包含所有表和字段。甚至关系也是正确建立的,但不是删除级联。

如果我去Management Studio并且我检查关系的更新/删除规则,则两者都被停用。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

使用这些课程:

public class Parent
{
    public int ID { get; set; }
    public ICollection<Child> Children { get; set; }
}

public class Child
{
    public int ID { get; set; }
    public int ParentID { get; set; }
    public Parent Parent { get; set; }
}

配置如下:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Parent>()
        .HasMany(p => p.Children)
        .WithRequired(c => c.Parent)
        .HasForeignKey(c => c.ParentID)
        .WillCascadeOnDelete(true);

}

在外键上放置级联删除:

public override void Up()
{
    CreateTable(
        "dbo.Children",
        c => new
            {
                ID = c.Int(nullable: false, identity: true),
                ParentID = c.Int(nullable: false),
            })
        .PrimaryKey(t => t.ID)
        .ForeignKey("dbo.Parents", t => t.ParentID, cascadeDelete: true)
        .Index(t => t.ParentID);

    CreateTable(
        "dbo.Parents",
        c => new
            {
                ID = c.Int(nullable: false, identity: true),
            })
        .PrimaryKey(t => t.ID);

}