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);
            });
Другие вопросы по тегам