2015-11-15 55 views
2

试图运行我的MVC应用程序EF CodeFirst - 不能创建数据库

Introducing FOREIGN KEY constraint 'FK_dbo.Passages_dbo.Localizations_ToID' on table 'Passages' 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' 

I`ve看到很多帖子我得到的错误,但我无法得到我应该怎么办。 有我的模型:

public class Passage 
    { 
     [Key] 
     public int ID { get; set; } 
     public int FromID { get; set; } 
     [ForeignKey("FromID")] 
     public Localization FromLocalizaton { get; set; } 
     public int ToID { get; set; } 
     [ForeignKey("ToID")] 
     public Localization ToLocalization { get; set; } 
     public DateTime DepartureTime { get; set; } 
     public DateTime ArrivalTime { get; set; } 
     public DateTime? AdditionalTime { get; set; } 
     public bool Weekend { get; set; } 
     public int Seats { get; set; } 
    } 


public class Localization 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Province { get; set; } 
    public string City { get; set; } 
    public string PostalCode { get; set; } 
    public string StreetAdres { get; set; } 
} 

通道有两个外键是指具有一一对应的关系

回答

1

问题从这次来到Lozalization:

通道有两个外键是指Lozalization与一对一的关系

因为默认情况下这两个关系是在Passage(看外键FromIDToID没有Nullable<int>int?),因此代码首先在这些关系上创建级联删除操作。但是,两个级联删除将应用于不允许的同一个表上。

要解决此问题,有两种解决方法:

让外国键属性Nullable<int>在默认情况下不会产生级联删除该关系的行动之一。

或者,您可以禁用级联使用流利的API这样的删除操作:

// Assuming that you want to disable cascade deletion with ToLocalization 
modelBuilder.Entity<Passage>() 
      .HasRequired(p => p.ToLocalization) 
      .WithMany() 
      .WillCascadeOnDelete(false);