jaf*_*ffa 28 entity-framework cascading-deletes ef-code-first entity-framework-4.1
我想使用代码优先在表上启用CASCADE DELETE.从头开始重新创建模型时,即使关系是自动设置,也不会设置CASCADE DELETE.奇怪的是,它可以为一些具有多对多关系的表启用此功能,您可能认为它可能存在问题.
设置: 表A < - 表B.
表B的FK指向表A的PK.
为什么这不起作用?
Sla*_*uma 55
您没有获得级联删除的可能原因是您的关系是可选的.例:
public class Category
{
public int CategoryId { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在此模型中,您将获得一个Product表,该表具有Category表的外键,但此键可以为空,并且默认情况下数据库中没有级联删除设置.
如果您想要有所需的关系,那么您有两个选择:
注释:
public class Product
{
public int ProductId { get; set; }
[Required]
public Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
流畅的API:
modelBuilder.Entity<Product>()
.HasRequired(p => p.Category)
.WithMany();
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,都会自动配置级联删除.
如果您希望将关系设置为可选但是使用级联删除,则需要明确配置:
modelBuilder.Entity<Product>()
.HasOptional(p => p.Category)
.WithMany()
.WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)
编辑:在最后一个代码片段中,您也可以简单地编写.WillCascadeOnDelete().此无参数重载默认设置true为设置级联删除.
| 归档时间: |
|
| 查看次数: |
30880 次 |
| 最近记录: |