我可以使用数据注释来执行使用Entity Framework 4.1 RC进行级联删除吗?

时间:2011-04-06 15:38:40

标签: .net entity-framework entity-framework-4.1

在EF4.1 RC中使用数据注释时是否有注释导致级联删除?

public class Category
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public ICollection<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Category Category { get; set; }
}

使用此模型生成的约束为:

ALTER TABLE [Product] ADD CONSTRAINT [Product_Category] 
FOREIGN KEY ([Category_Id]) REFERENCES [Categorys]([Id]) 
ON DELETE NO ACTION ON UPDATE NO ACTION;

如果不是如何实现的?

4 个答案:

答案 0 :(得分:48)

在Product表类别关系字段上放置必需元件解决了这个问题

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    [Required]  //<======= Forces Cascade delete
    public Category Category { get; set; }
}

答案 1 :(得分:39)

我想默认关闭级联删除(删除OneToManyCascadeDeleteConvention

然后我希望通过注释将它们添加回来,但是对于EF不包含CascadeDeleteAttribute感到惊讶。

在花费太长时间解决EF的荒谬的内部访问器级别之后,这个要点中的代码添加了一个允许使用属性的约定:https://gist.github.com/tystol/20b07bd4e0043d43faff

要使用,只需将[CascadeDelete]粘贴在关系的导航属性的任意一端,然后在DbContext的OnModeCreating回调中添加约定。例如:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
    modelBuilder.Conventions.Add<CascadeDeleteAttributeConvention>();
}  

在你的模特中:

public class BlogPost
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    [CascadeDelete]
    public List<BlogPostComment> Comments { get; set; } 
}

答案 2 :(得分:3)

数据注释不确定,但您可以通过修改实际关系将其添加到数据库中。

看起来数据注释的答案是否定的: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/394821ae-ab28-4b3f-b554-184a6d1ba72d/

这个问题似乎显示了如何使用流利的语法来完成,但不确定这是否适用于4.1 RC EF 4.1 RC: Weird Cascade Delete

答案 3 :(得分:1)

作为Tyson's answer的另一个示例,我在实体中使用了[CascadeDelete]属性,如下所示,它成功地将“级联”删除规则添加到Parent - {{1}关系。

Child