添加迁移后尝试 "update-database" 时出现此错误
I get this error while trying to "update-database" after adding migration
尝试从包管理器控制台更新数据库后出现此错误。这是一些代码。 Class 用户已经在数据库中,我正在尝试将 class Poslovnica 迁移到服务器。
引用的 table 'User' 中没有与外键 'FK_Poslovnica_User_UserID' 中的引用列列表匹配的主键或候选键。
无法创建约束或索引。查看以前的错误。
public class Poslovnica
{
public int PoslovnicaID { get; set; }
[Required]
public string Naziv { get; set; }
public string Adresa { get; set; }
public User User { get; set; }
public int? UserID { get; set; }
}
我已经添加了一些具有外键 UserID 的 classes,并且没有任何问题
public class User
{
public int userID { get; set; }
[Required(AllowEmptyStrings = false)]
[MaxLength(64)]
public string ime { get; set; }
}
来自迁移的模型构建器
modelBuilder.Entity("ClassLibrary1.Models.Poslovnica", b =>
{
b.Property<int>("PoslovnicaID")
.ValueGeneratedOnAdd()
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
b.Property<string>("Adresa");
b.Property<string>("Naziv")
.IsRequired();
b.Property<int?>("UserID");
b.HasKey("PoslovnicaID");
b.HasIndex("UserID");
b.ToTable("Poslovnica");
});
迁移生成器
migrationBuilder.CreateTable(
name: "Poslovnica",
columns: table => new
{
PoslovnicaID = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Naziv = table.Column<string>(nullable: false),
Adresa = table.Column<string>(nullable: true),
UserID = table.Column<int>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Poslovnica", x => x.PoslovnicaID);
table.ForeignKey(
name: "FK_Poslovnica_User_UserID",
column: x => x.UserID,
principalTable: "User",
principalColumn: "userID",
onDelete: ReferentialAction.Restrict);
});
感谢任何帮助!
您在 Poslovnica
和 User
之间有一对一的关系,但是 Poslovnica
中的外键与 User
中的主键不匹配。
将 User
中的 属性 userID
重命名为 UserID
以匹配外键,因为您要按照约定进行,因此它们必须匹配以便 ef核心来了解这种关系。和 re-update
编辑
可能 UserID
未被识别为 table Users
中的主键
将以下属性添加到 UserID
:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserID { get; set; }
}
并更新您的数据库。
尝试从包管理器控制台更新数据库后出现此错误。这是一些代码。 Class 用户已经在数据库中,我正在尝试将 class Poslovnica 迁移到服务器。
引用的 table 'User' 中没有与外键 'FK_Poslovnica_User_UserID' 中的引用列列表匹配的主键或候选键。 无法创建约束或索引。查看以前的错误。
public class Poslovnica
{
public int PoslovnicaID { get; set; }
[Required]
public string Naziv { get; set; }
public string Adresa { get; set; }
public User User { get; set; }
public int? UserID { get; set; }
}
我已经添加了一些具有外键 UserID 的 classes,并且没有任何问题
public class User
{
public int userID { get; set; }
[Required(AllowEmptyStrings = false)]
[MaxLength(64)]
public string ime { get; set; }
}
来自迁移的模型构建器
modelBuilder.Entity("ClassLibrary1.Models.Poslovnica", b =>
{
b.Property<int>("PoslovnicaID")
.ValueGeneratedOnAdd()
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
b.Property<string>("Adresa");
b.Property<string>("Naziv")
.IsRequired();
b.Property<int?>("UserID");
b.HasKey("PoslovnicaID");
b.HasIndex("UserID");
b.ToTable("Poslovnica");
});
迁移生成器
migrationBuilder.CreateTable(
name: "Poslovnica",
columns: table => new
{
PoslovnicaID = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Naziv = table.Column<string>(nullable: false),
Adresa = table.Column<string>(nullable: true),
UserID = table.Column<int>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Poslovnica", x => x.PoslovnicaID);
table.ForeignKey(
name: "FK_Poslovnica_User_UserID",
column: x => x.UserID,
principalTable: "User",
principalColumn: "userID",
onDelete: ReferentialAction.Restrict);
});
感谢任何帮助!
您在 Poslovnica
和 User
之间有一对一的关系,但是 Poslovnica
中的外键与 User
中的主键不匹配。
将 User
中的 属性 userID
重命名为 UserID
以匹配外键,因为您要按照约定进行,因此它们必须匹配以便 ef核心来了解这种关系。和 re-update
编辑
可能 UserID
未被识别为 table Users
中的主键
将以下属性添加到 UserID
:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserID { get; set; }
}
并更新您的数据库。