我可以使用数据注释执行级联删除与实体框架4.1 RC



当使用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;

如果不是,如何实现?

将required放到Product表中类别关系字段解决了这个问题

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]  //<======= Forces Cascade delete
    public Category Category { get; set; }
}

我喜欢默认关闭级联删除(通过删除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; } 
}

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

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

这个问题似乎显示了如何使用流畅的语法,但不确定这是否适用于4.1 RCEF 4.1 RC:怪异级联删除

作为Tyson回答的另一个例子,我在一个实体中使用[CascadeDelete]属性,如下所示,它成功地将"Cascade"删除规则添加到Parent - Child关系中。

public class Child
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    [SkipTracking]
    public Guid Id { get; set; }
    [CascadeDelete]
    public virtual Parent Parent { get; set; }
    [Required]
    [ForeignKey("Parent")]
    public Guid ParentId { get; set; }
}

最新更新