簡體   English   中英

外鍵可能會導致循環或多個級聯路徑

[英]Foreign key may cause cycles or multiple cascade paths

我試圖創建一個(在我看來)非常簡單的設置,但是我不知道為什么在運行Update-Database時為什么總是出現此錯誤:

在表“ Breweries”上引入FOREIGN KEY約束“ FK_dbo.Breweries_dbo.Pages_PageId”可能會導致循環或多個級聯路徑。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。

我正在嘗試設置此結構:

Brewery > Page > IdentityUser

這是我的課程:

public class Brewery
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public Guid BreweryId { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    [ForeignKey("Page")]
    public Guid PageId { get; set; }

    public virtual Page Page { get; set; }

    public virtual ICollection<Image> Images { get; set; }
}

public class Page
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public Guid PageId { get; set;}
    [Required]
    public string Title { get; set; }

    public string Content { get; set; }
    [Required]
    [ForeignKey("CreatorUser")]
    public string CreatorUserId { get; set; }

    public virtual IdentityUser CreatorUser { get; set; }
}

我看過很多其他的Stack Overflow帖子,似乎我應該在OnModelCreating進行設置,但是我OnModelCreating 我想,以避免一個ICollection<Brewery> Breweries的財產Page ,因為我想許多不同的實體參考Page的實體,它是無關一個Page是誰引用它。

我是Entity Framework和Code First的新手,所以我可能不知不覺地遇到了這個錯誤。 我會很高興對建立正確的關系有所幫助。

由於需要PageBrewery之間的關聯,因此EF默認為級聯刪除。 但是,如果有很多引用Page實體,則會有多個級聯路徑,您必須覆蓋默認值:

modelBuilder.Entity<Brewery>()
            .HasRequired(b => b.Page)
            .WithMany() // <= no inverse collection in Page.
            .HasForeignKey(b => b.PageId)
            .WillCascadeOnDelete(false);

您只能通過流暢的映射來做到這一點。 同樣,這將替換Brewery.PageId上的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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