Entity Framework Core связывает множество со многими с IdentityUser
Я ищу способ связать дефолт IdentityUser
с пользовательским классом, но я получаю эту ошибку:
Имена столбцов в каждой таблице должны быть уникальными. Имя столбца "AppUserId" в таблице "HMTUser" указывается более одного раза.
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; }
}
Класс пользователя:
public class HMTUser
{
public int AppUserID { get; set; }
public AppUser AppUser { get; set; }
public int HHID { get; set; }
public HMT HMT { get; set; }
}
и определили OnModelCreating с
modelBuilder.Entity<HMTUser>()
.HasKey(s=> new { s.HHID , s.AppUserID });
Я не уверен в int
часть как AppUser
происходит от IdentityUser
а также id
является varchar
это будет так?
ОБНОВИТЬ
Изменение int на string сделало свою работу, но ef core запрашивал PK в сущности HMTUser, поэтому сделал новый, используя
[Key]
Это работает, но это также создает новое имя таблицы
'AppUser'
который не используется для хранения пользовательских данных, пользовательские данные по-прежнему сохраняются по умолчанию
'AspNetUsers'
Таблица.
1 ответ
Я проверил ваш код и думаю, что одним из решений является изменение типа 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);
});