Тип сущности «IdentityUserLogin» требует определения первичного ключа [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Тип сущности «IdentityUserLogin» требует определения первичного ключа [дубликат]

Сообщение Anonymous »

Я использую dotnet core 1.1 в Linux, и у меня возникают проблемы, когда я хочу отделитьidentityContext от моего обычного dbContext, всякий раз, когда я запускаю следующую строку в моем файле start.cs --> configure:

Код: Выделить всё

//... some other services
using (var serviceScope = app.ApplicationServices.GetRequiredService().CreateScope())
{
serviceScope.ServiceProvider.GetService().Database.Migrate();
//running other database.migrations here + seeding data. But it is the line above that causes problems
Итак, эта строка выдает исключение: тип объекта «IdentityUserLogin» требует определения первичного ключа

Я просто не понимаю этого, почему моя работа — предоставить IdentityUserLogin первичный ключ??, это сторонний класс, и я даже не прикасался к нему. У меня есть следующая простая настройка:

Код: Выделить всё

namespace EsportshubApi.Models
{
public class ApplicationDbContext :  IdentityDbContext
{
public ApplicationDbContext(DbContextOptions options) : base(options)
{
}

public ApplicationDbContext()
{

}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

}
}
}
И пользователь приложения:

Код: Выделить всё

namespace EsportshubApi.Models.Entities
{

public class ApplicationUser : IdentityUser
{
public ApplicationUser() { }

public static ApplicationUserBuilder Builder()
{
return new ApplicationUserBuilder(new ApplicationUser());
}

public int AccountId { get; set; }
public Guid AccountGuid { get; set; }
public string Salt { get; set; }
public bool Verified { get; set; }
public string Checksum { get; set; }
public string Password { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
}

}
В моем стартапе я настраиваю структуру идентификации следующим образом:

configureServices:

Код: Выделить всё

services.AddEntityFrameworkSqlServer().AddMySQL().AddDbContext(options =>
options.UseMySQL(config["ConnectionStrings:DefaultConnection"]));
И

Настройте:

Код: Выделить всё

 app.UseIdentity();
Мой проект с открытым исходным кодом: мой репозиторий на GitHub

если это поможет.

Я много чего пробовал. Двумя наиболее многообещающими были выведение всех классов, используемых в этом общем шоу, и их явная передача, попытка изменить все их ключи на целые числа и т. д. И это дало точно такую ​​же ошибку, только с int вместо строки . Другой способ, которым я попробовал, заключался в том, чтобы сделать следующее внутри OnModelCreating, чтобы предоставить IdentityUserLogin первичный ключ, например:

Код: Выделить всё

 modelBuilder.Entity()
.Property(login => login.UserId)
.ForMySQLHasColumnType("PK")
.UseSqlServerIdentityColumn()
.UseMySQLAutoIncrementColumn("AI");
Как видите, это было тогда, когда у меня был UserId как целое число, но я даже не уверен, должен ли UserId быть его первичным ключом. Вместо этой ошибки я могу получить другие ошибки, в которых говорится:


IdentityUserLogin является частью иерархии и не имеет значений дискриминатора


Но если бы у меня были значения дискриминатора, в конечном итоге это просто вернулось бы к этой ошибке. Самое странное, на мой взгляд, это то, что у меня ТОЧНО та же реализация, что и в примере UnicornStore на github, которая также использует немного инфраструктуры идентификации .... Так что мне действительно нужна ваша помощь, ребята. Эту ошибку можно воспроизвести, загрузив проект, скопировав default.appsettings.json в appsettings.json, вставив действительную строку подключения, восстановив dotnet, запустив dotnet run --environment Development. .

Я даже пытался изменить реализацию, чтобы использовать базу данных MSSQL вместо MySQL, но это привело к той же ошибке.

Подробнее здесь: https://stackoverflow.com/questions/407 ... be-defined
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»