错误:引入FOREIGN KEY约束可能会导致循环或多个级联路径 - 为什么?

时间:2016-09-18 07:35:06

标签: c# ef-code-first

我有很多课程,但在PorductionLineMachine我遇到了一些问题。 ProductionLine类是:

[Column("FldKeyId")]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   [Required]
   [Key]
   public int MyKeyId { get; set; }
   [Column("FldCode")]
    [Required]
   [Index(IsUnique = true)]
   public int MyCode
   {
       get { return _Code; }
       set { _Code = value; }
   }
   [Column("FldName")]
    [Required]
   public string MyName
   {
       get { return _Name; }
       set { _Name = value; }
   }
   [Column("FldLocation")]
    [Required]
   public string MyLocation
   {
       get { return _Location; }
       set { _Location = value; }
   }

   [Column("FldCompanyKey")]
   public int MyCompanyKey { get; set; }
   [ForeignKey("MyCompanyKey")]
    [Required]
   public virtual Company Company { get; set; }

机器类是:

[Column("FldKeyId")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Required]
    [Key]
    public int MyKeyId { get; set; }
    [Column("FldCode")]
    [Required]
    [Index(IsUnique = true)]
    public int MyMachineCode
    {
        get { return _MachineCode; }
        set { _MachineCode = value; }
    }
    [Column("FldName")]
    [Required]
    public string MyName
    {
        get { return _Name; }
        set { _Name = value; }
    }

    [Column("FldProductionLineKey")]

    public int MyProductionLineKey { get; set; }
    [ForeignKey("MyProductionLineKey")]
    //[Required]
    public ProductionLine ProductionLine { get; set; }

当我想从这个类生成数据库时我有这个错误:

  

引入FOREIGN KEY约束   'FK_dbo.TblMachine_dbo.TblProductionLine_FldProductionLineKey'上   table'TblMachine'可能会导致循环或多个级联路径。指定   ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN   关键约束。

无法创建约束或索引。查看以前的错误。 当我评论这3行时

[Column("FldProductionLineKey")]
public int MyProductionLineKey { get; set; }
[ForeignKey("MyProductionLineKey")]

错误消失但我想在其他一些类中使用此代码cus我有这个问题... 我该怎么办? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

  

您收到此错误消息,因为在SQL Server中,表不能   在所有级联参照的列表中出现不止一次   由DELETE或UPDATE语句启动的操作。   例如,级联引用操作树必须只有   级联引用操作的特定表的一个路径   树。

您可以将cascadeDelete设置为false或true(在您的迁移Up()方法中)。取决于您的要求。

AddForeignKey(..., cascadeDelete: false);

了解更多信息,请查看this question