簡體   English   中英

EF CascadeOnDelete Code First

[英]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();

這是CompanyAccount之間的一對一關系。 使用此映射,您可以刪除[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM