异常:外键约束可能导致多次循环

Exception: Foreign Key Constraint may cause multiple cycles

我是 ASP .NET 的新手。我正在尝试使用以下模型进行简单的 CRUD。 Paperclass中有3个ChartOfAccountId,所以有3个Parent-Child关系。这些关系之一 ChartOfAccountIdInventory 导致以下异常:

Introducing FOREIGN KEY constraint FK_dbo.Papers_dbo.ChartOfAccounts_ChartOfAccountIdInventory' on table 'Papers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint.

ChartOfAccount Class:

public partial class ChartOfAccount
{
    public ChartOfAccount()
    {
        this.PapersSale = new HashSet<Paper>();
        this.PapersCostOfSale = new HashSet<Paper>();
        this.PapersInventory = new HashSet<Paper>();
    }

    [StringLength(50)]
    [ScaffoldColumn(true)]
    public string Id { get; set; }

    [StringLength(50)]
    public string Name { get; set; }

    public virtual ICollection<Paper> PapersSale { get; set; }
    public virtual ICollection<Paper> PapersCostOfSale { get; set; }
    public virtual ICollection<Paper> PapersInventory { get; set; }
}

论文Class:

    public class Paper
    {
        [Key]
        [ScaffoldColumn(false)]
        public int Id { get; set; }

        [DisplayName("Name")]
        [Required(ErrorMessage = "Name is required")]
        [StringLength(50)]
        public string Name { get; set; }

        [DisplayName("Chart Of Account For Sale")]
        [Required(ErrorMessage = "Chart Of Account is required")]
        [StringLength(50)]
        public string ChartOfAccountIdSale { get; set; }

        [DisplayName("Chart Of Account For Inventory")]
        [Required(ErrorMessage = "Chart Of Account is required")]
        [StringLength(50)]
        public string ChartOfAccountIdInventory { get; set; }

        [DisplayName("Chart Of Account For Cost Of Sale")]
        [Required(ErrorMessage = "Chart Of Account is required")]
        [StringLength(50)]
        public string ChartOfAccountIdCostOfSale { get; set; }

        [ForeignKey("ChartOfAccountIdSale")]
        public virtual ChartOfAccount ChartOfAccountSale { get; set; }

        [ForeignKey("ChartOfAccountIdInventory")]
        public virtual ChartOfAccount ChartOfAccountInventory { get; set; }

        [ForeignKey("ChartOfAccountIdCostOfSale")]
        public virtual ChartOfAccount ChartOfAccountCostOfSale { get; set; }
   }    

你应该通过 fluentApi 设置“WillCascadeOnDelete = False”,像这样:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
         modelBuilder.Entity<Paper>()
            .HasRequired(c => c.ChartOfAccountSale )
            //.WithMany()
            .HasForeignKey(c => c.ChartOfAccountIdSale)
            .WillCascadeOnDelete(false);

         modelBuilder.Entity<Paper>()
            .HasRequired(c => c.ChartOfAccountInventory )
            //.WithMany()
            .HasForeignKey(c => c.ChartOfAccountIdInventory )
            .WillCascadeOnDelete(false);

         modelBuilder.Entity<Paper>()
            .HasRequired(c => c.ChartOfAccountCostOfSale )
            //.WithMany()
            .HasForeignKey(c => c.ChartOfAccountIdCostOfSale )
            .WillCascadeOnDelete(false);

}

我为所有 chartOfAccounts 使用了必需的标签,这就是它出现异常的原因。