繁体   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