На проекте мигрировалась база данных, которая когда-то использовалась с
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<string>
, но это не дали вообще никаких результатов. Как создать оптимальную конфигурацию, что бы оно хотя бы запустилось?