如何解决添加迁移后尝试“更新数据库”时出现此错误
尝试从程序包管理器控制台更新数据库后出现此错误。这是一些代码。类用户已经在数据库中,我正尝试将Poslovnica类迁移到服务器。
在参考表“用户”中没有与外键“ 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且没有任何问题的类
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
之间存在1对1的关系,但是Poslovnica
中的外键与User
中的主键不匹配。
将userID
中的属性User
重命名为UserID
,以匹配外键,因为按照惯例,因此它们必须匹配,以便ef core可以使用关系。并重新更新
修改
可能UserID
在表Users
中未被识别为主键
将以下属性添加到UserID
中:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserID { get; set; }
}
并更新您的数据库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。