.net 我可以使用数据注释执行实体框架4.1 RC的级联删除吗?

.net 我可以使用数据注释执行实体框架4.1 RC的级联删除吗?,.net,entity-framework,entity-framework-4.1,.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

在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; }
}

如果不是,它是如何实现的?

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

对于数据注释,答案似乎是否定的:

这个问题似乎展示了如何使用流畅的语法来实现,但不确定这是否适用于4.1RC

将required置于Product table Category relationship(产品表类别关系)字段可解决此问题

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

    [Required]  //<======= Forces Cascade delete
    public Category Category { get; set; }
}
公共类产品
{
公共int Id{get;set;}
公共字符串名称{get;set;}

[必需]/我喜欢在默认情况下关闭级联删除(通过删除
OneToManyCascadeDeleteConvention

我当时希望通过注释将它们添加回,但很惊讶EF没有包含
CascadeDeleteAttribute

在围绕EF荒谬的内部访问器级别花费了太长时间后,本要点中的代码添加了一个允许使用属性的约定:

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

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

    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
    modelBuilder.Conventions.Add<CascadeDeleteAttributeConvention>();
}  
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Conventions.Remove();
modelBuilder.Conventions.Remove();
modelBuilder.Conventions.Add();
}  
在您的模型中:

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; } 
}
公共类BlogPost
{
公共int Id{get;set;}
公共字符串标题{get;set;}
公共字符串内容{get;set;}
[删除]
公共列表注释{get;set;}
}

作为另一个示例,我在一个实体中使用了如下的
[CascadeDelete]
属性,它成功地将“Cascade”删除规则添加到
-
关系中

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; }
}

这比选择的答案要好,因为Required属性意味着一个不可为null的外键。它与EF 6一起工作。谢谢!这是一个很好的解决方案,另外,请注意,应该将约定类添加到
modelBuilder.Conventions
中的
OnModelCreating
方法中。这似乎只适用于[Required]关系,因此在我的例子中,我修改了CascadeDeleteAttribute以继承RequiredAttribute,以保持清晰。非常有创意。谢谢。删除什么后会删除什么?搜索
ef core外键注释cascade delete
未找到任何内容。您的评论按预期工作。谢谢
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; }
}