[英]EF CascadeOnDelete Code First
我有這個實體:
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
,在刪除公司時將刪除該Account
。
您需要的映射是:
modelBuilder.Entity<Company>()
.HasOptional(c => c.Account)
.WithRequired(a => a.Company)
.WillCascadeOnDelete();
這是Company
與Account
之間的一對一關系。 使用此映射,您可以刪除[ForeignKey("Company")]
屬性和[Required]
屬性,因為Guid
不可為空,因此始終需要。
請點擊鏈接啟用級聯刪除 。
您可以使用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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.