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