我正在寻找一种将默认IdentityUser
与自定义类绑定的方法,但出现此错误:
每个表中的列名必须唯一。表“ HMTUser”中的列名“ AppUserId”已多次指定。
AppUser
类:
public class AppUser : IdentityUser
{
public string FName { get; set; }
public string LName { get; set; }
public List<HMTUser> HMTUsers { get; set; }
}
HMT班级:
public class HMT
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int HID { get; set; }
public string Name { get; set; }
public List<HMTUser> HMTUsers { get; set; }
}
HUser类:
public class HMTUser
{
public int AppUserID { get; set; }
public AppUser AppUser { get; set; }
public int HHID { get; set; }
public HMT HMT { get; set; }
}
并使用
定义了OnModelCreatingmodelBuilder.Entity<HMTUser>()
.HasKey(s=> new { s.HHID , s.AppUserID });
我不确定int
是因为AppUser
是从IdentityUser
派生而id
是varchar
,会是这样吗?
更新
将int更改为字符串即可完成工作,但ef核心正在HMTUser实体中请求PK,因此使用
新建了一个[键]
它可以工作,但它还会创建一个新的表名
“ AppUser”
不用于存储用户数据,用户数据仍默认保存
'AspNetUsers'
表。
答案 0 :(得分:0)
我已经测试了您的代码,我认为一种解决方案是将AppUserId
的类型从int
更改为string
。通过此更改,一切正常。
迁移后生成的代码:
migrationBuilder.CreateTable(
name: "HMTUsers",
columns: table => new
{
AppUserId = table.Column<string>(nullable: false),
HHID = table.Column<int>(nullable: false),
HMTHID = table.Column<int>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_HMTUsers", x => new { x.HHID, x.AppUserId });
table.ForeignKey(
name: "FK_HMTUsers_AppUsers_AppUserId",
column: x => x.AppUserId,
principalTable: "AppUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_HMTUsers_HTMs_HMTHID",
column: x => x.HMTHID,
principalTable: "HTMs",
principalColumn: "HID",
onDelete: ReferentialAction.Restrict);
});