实体框架中的'update-database'后出错6

问题描述:

我正在使用Entity Framework 6项目开发WEB API 2,并且在更新数据库后出现问题。实体框架中的'update-database'后出错6

错误:

Introducing FOREIGN KEY constraint 'FK_dbo.Rates_dbo.Users_Id_User' on table 'Rates' 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 or index. See previous errors. 

这是我率等级:

public class Rate 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id_Rate { get; set; } 
     public int Id_User { get; set; } 
     public int Id_Recipe { get; set; } 
     public int Value_Rate { get; set; } //1-5 

     public virtual User User { get; set; } 
     public virtual Recipe Recipe { get; set; } 
    } 

和我的用户等级:

public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id_User { get; set; } 
    public int Id_List_Products { get; set; } 
    public int Id_List_Black_Products { get; set; } 
    public string Login { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 
    public Boolean Social_Account { get; set; } // 1 - social account, 0 - normal account 
    public string URL_Avatar { get; set; } //URL of avatar thumbnail 

    public virtual List_Products List_Products { get; set; } 
    public virtual List_Black_Products List_Black_Products { get; set; } 
} 

我不知道在哪里的问题。 任何提示?

+0

安置自己的ConnectionString Model类..一个包含'modelBuilder' –

+0

您需要指定应该发生什么给用户删除费率。如果您有用户参考速率和速率参考用户,级联删除会导致问题。 –

+0

[实体框架:如何解决“FOREIGN KEY约束可能导致循环或多个级联路径”?](https://*.com/questions/14489676/entity-framework-how-to-solve-foreign-键约束-MAY-原因周期 - 或多) –

由于关系的多个路径发生此问题。如果您删除了一条记录,它将最终从另一个表中删除其他记录,这将最终从另一个表中删除更多记录,最终从您开始的表中删除记录,循环将重复。真正的灾难性的,开发商最糟糕的噩梦。为了解决这个问题,添加自定义属性,例如,在迁移:

CreateTable(
      "dbo.SomeTable", 
      c => new 
      { 
       id = c.Int(nullable: false, identity: true), 
       createdon = c.DateTime(), 
       createdby = c.String(), 
      }) 
      .PrimaryKey(t => t.id) 
      .ForeignKey("dbo.Customers", t => t.Customerid, cascadeDelete: true) 
      .ForeignKey("dbo.AnotherTable", t => t.Anotherid, cascadeDelete: false) 
      .Index(t => t.Customerid) 
      .Index(t => t.Scopeid); 

设置cascadeDeletefalse或受影响的表/(模型类背衬)的AutoUpdatefalse并相应更新数据库。

简单地说,你们的关系是循环的,例如: 客户 - >工资 - >工资单 - >客户 所以,当你删除一个客户,其相应的薪酬结果是/删除其删除受到尊重的工资单记录将循环回删除链接的客户,并且此循环不断重复导致混乱。所以Entity Framework和SQL很好地理解了这一点,并提示用户关闭受影响/导致错误的删除/更新连接。

欧凯,我改变cascadeDelete为false:

CreateTable(
      "dbo.Rates", 
      c => new 
       { 
        Id_Rate = c.Int(nullable: false, identity: true), 
        Id_User = c.Int(nullable: false), 
        Id_Recipe = c.Int(nullable: false), 
        Value_Rate = c.Int(nullable: false), 
       }) 
      .PrimaryKey(t => t.Id_Rate) 
      .ForeignKey("dbo.Recipes", t => t.Id_Recipe, cascadeDelete: true) 
      .ForeignKey("dbo.Users", t => t.Id_User, cascadeDelete: false) 
      .Index(t => t.Id_User) 
      .Index(t => t.Id_Recipe); 

和它的作品;)