Ben*_*der 37 .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; }
}
Run Code Online (Sandbox Code Playgroud)
使用此模型生成的约束是:
ALTER TABLE [Product] ADD CONSTRAINT [Product_Category]
FOREIGN KEY ([Category_Id]) REFERENCES [Categorys]([Id])
ON DELETE NO ACTION ON UPDATE NO ACTION;
Run Code Online (Sandbox Code Playgroud)
如果不是如何实现?
Ben*_*der 49
在Product表类别关系字段上放置必需解决此问题
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
[Required] //<======= Forces Cascade delete
public Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Tys*_*son 43
我喜欢默认关闭级联删除(通过删除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>();
}
Run Code Online (Sandbox Code Playgroud)
在你的模型中:
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; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21518 次 |
最近记录: |