Конфигурация 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 string ProviderKey { get; set; }
public string ProviderDisplayName { get; set; }
public string UserId { get; set; }
public virtual AspNetUser1 User { get; set; }
}
И так же да, я пробовал наследовать его от IdentityUserLogin, но это не дали вообще никаких результатов. Как создать оптимальную конфигурацию, что бы оно хотя бы запустилось?
