我有这个实体:
public class Account
{
[Key]
[ForeignKey("Company")]
[Required]
public Guid CompanyId { get; set; }
public virtual Company Company { get; set; }
}
这一个:
public class Company : PrimaryKey
{
public string Name { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
public virtual Account Account { get; set; }
}
如何使用流畅的api启用级联删除,我试过这个:
modelBuilder.Entity<Company>().HasOptional<Account>().WithRequired().WillCascadeOnDelete();
但我不知道这意味着什么。基本上,我希望Company
有一个可选的Account
,在删除公司时会删除它。
答案 0 :(得分:2)
您需要的映射是:
modelBuilder.Entity<Company>()
.HasOptional(c => c.Account)
.WithRequired(a => a.Company)
.WillCascadeOnDelete();
这是Company
和Account
之间的一对一关系。通过此映射,您可以删除[ForeignKey("Company")]
属性和[Required]
属性,因为Guid
不可为空,因此始终需要。
答案 1 :(得分:0)
请点击链接Enabling Cascade Delete。
您可以使用以下命令在关系上配置级联删除 WillCascadeOnDelete方法。如果是依赖实体的外键 不可为空,然后Code First设置级联删除 关系。如果依赖实体上的外键可以为空, Code First不会在关系上设置级联删除,以及何时 删除主体后,外键将被设置为null。
您可以使用以下命令删除这些级联删除约定:
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>()
以下代码将配置所需的关系 禁用级联删除。
modelBuilder.Entity<Course>()
.HasRequired(t => t.Department)
.WithMany(t => t.Courses)
.HasForeignKey(d => d.DepartmentID)
.WillCascadeOnDelete(false);
在你的例子中有类似的东西:
modelBuilder
.Entity<Company>()
.HasOptional<Account>()
.HasForeignKey(a => a.CompanyId)
.WillCascadeOnDelete();