【问题标题】:Exception: Foreign Key Constraint may cause multiple cycles例外:外键约束可能导致多个循环
【发布时间】:2015-08-20 09:12:12
【问题描述】:

我是ASP .NET 的新手。我正在尝试使用以下模型进行简单的 CRUD。 Paper类中有三个ChartOfAccountIds,所以有三个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 类:

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; }
}

论文类:

    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; }
   }    

【问题讨论】:

    标签: c# asp.net-mvc ef-code-first foreign-key-relationship


    【解决方案1】:

    你应该通过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);
    

    }

    【讨论】:

      【解决方案2】:

      我对所有 chartOfAccounts 都使用了 required 标签,这就是它出现异常的原因。

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 2012-09-21
        • 2015-10-26
        • 2020-12-26
        • 2016-03-26
        相关资源
        最近更新 更多