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");