C# – 外键引用无效表 – 基本迁移无效

试图用C#创建我的第一个项目。 然而,到目前为止,它非常令人沮丧。 这是一个我无法解决的问题,因为我没有看到任何错误。

我正试图在我的数据库中进行简单的迁移。

用户迁移文件

public override void Up() { CreateTable( "dbo.Users", c => new { user_id = c.Int(nullable: false, identity: true), first_name = c.String(), last_name = c.String(), email = c.String(), role = c.String(), }) .PrimaryKey(t => t.user_id); } 

位置迁移文件

  public override void Up() { CreateTable( "dbo.Locations", c => new { loc_id = c.Int(nullable: false, identity: true), loc_name = c.String(), }) .PrimaryKey(t => t.loc_id); CreateTable( "dbo.UserLoc", c => new { ul_id = c.Int(nullable: false, identity: true), fk_user_id = c.Int(nullable: false), fk_loc_id = c.Int(nullable: false), }) .PrimaryKey(t => t.ul_id); AddForeignKey("dbo.UserLoc", "fk_user_id", "dbo.Users", "user_id"); AddForeignKey("dbo.UserLoc", "fk_loc_id", "dbo.Locations", "loc_id"); } 

楷模:

User.cs

 public class User { [Key] public int user_id { get; set; } public string firs_tname { get; set; } public string last_name { get; set; } public string email { get; set; } public string role { get; set; } } 

Location.cs

 public class Locations { [Key] public int loc_id { get; set; } public int loc_name { get; set; } } 

UserLoc.cs

 public class UserLoc { [Key] public int ul_id { get; set; } [ForeignKey("Users")] public int fk_user_id { get; set; } public virtual User user { get; set; } [ForeignKey("Locations")] public int fk_location_id { get; set; } public virtual Locations location { get; set; } } 

每次我想迁移我都会得到同样的错误

外键’FK_dbo.UserLoc_dbo.Users_fk_user_id’引用无效表’dbo.Users’。 无法创建约束或索引。 查看以前的错误。

我究竟做错了什么?

首先,我建议您在导航属性名称的ForeignKey属性中更改您使用的FK名称:

 public class UserLoc { [Key] public int ul_id { get; set; } [ForeignKey("user")] public int fk_user_id { get; set; } public virtual User user { get; set; } [ForeignKey("location")] public int fk_location_id { get; set; } public virtual Locations location { get; set; } } 

通过这种方式,您可以告诉它哪个导航属性表示它是外键的关系。

之后,删除旧的迁移并尝试再次运行Add-Migration命令以重新生成它。 您现在应该看到在AddForeignKey方法之前调用CreateIndex方法:

 CreateIndex("dbo.UserLoc", "fk_user_id"); AddForeignKey("dbo.UserLoc", "fk_user_id", "dbo.Users", "user_id"); CreateIndex("dbo.UserLoc", "fk_loc_id"); AddForeignKey("dbo.UserLoc", "fk_loc_id", "dbo.Locations", "loc_id");