Конфигурация asp.net Identity под существующую базу данных

На проекте мигрировалась база данных, которая когда-то использовалась с asp.net Identity. Иными словами, подход Database First. В базе данных уже существуют все необходимые колонки, которые предоставляет сам asp.net Identity.

введите сюда описание изображения

Я сделал partial класс для AspNetUser1, которые наследуется от IdentityUser и, аналогично, для AspNetRole1:

public partial class AspNetUser1 : IdentityUser { }
public partial class AspNetRole1 : IdentityRole { }

Во второй части partial класса находятся связи с другими таблицами. Для контекста несколько вариантов:

  • public partial class AppDbContext : IdentityDbContext<AspNetUser1>
    
  • public partial class AppDbContext : IdentityDbContext<AspNetUser1, AspNetRole1, string>
    
  • public partial class AppDbContext : IdentityDbContext<AspNetUser1, IdentityRole, string>
    

Конфигурация самого asp.net Identity выглядит вот так:

services.AddIdentity<AspNetUser1, IdentityRole>(options =>
{
    options.SignIn.RequireConfirmedPhoneNumber = false;
    options.SignIn.RequireConfirmedEmail = false;
    options.SignIn.RequireConfirmedAccount = false;
})
.AddEntityFrameworkStores<AppDbContext>();

services.Configure<IdentityOptions>(options =>
{
    // ...
}

Проблема заключается в том, что при запуске проекта получаю ошибку:

System.InvalidOperationException: 'The entity type 'IdentityUserLogin<string>' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.'

То есть, ругается вообще на AspNetUserLogin. Тут стоит уточнить, что таблица не изменялась и имеет вид, которые предоставляется сам asp.net Identity. Проблема заключается скорее всего в конфигурации это таблицы, а именно, что Identity требует от неё primary key типа string:

public partial class AspNetUserLoginConfiguration : IEntityTypeConfiguration<AspNetUserLogin>
{
    public void Configure(EntityTypeBuilder<AspNetUserLogin> entity)
    {
        entity.HasKey(e => new { e.LoginProvider, e.ProviderKey });

        // ...
    }
}

Как говорил ранее, это старая БД, которая писалась под asp.net Identity, но сама конфигурация является auto generate кодом, который регулярно перегенерывается. Как вообще это всё лечить?

UPD: Сам AspNetUserLogin выглядит вот так:

public partial class AspNetUserLogin { public string LoginProvider { get; set; }
public string ProviderKey { get; set; }

public string ProviderDisplayName { get; set; }

public string UserId { get; set; }

public virtual AspNetUser1 User { get; set; }

}

И так же да, я пробовал наследовать его от IdentityUserLogin, но это не дали вообще никаких результатов. Как создать оптимальную конфигурацию, что бы оно хотя бы запустилось?


Ответы (0 шт):