Код: Выделить всё
//... 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 первичный ключ??, это сторонний класс, и я даже не прикасался к нему. У меня есть следующая простая настройка:
Код: Выделить всё
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();
если это поможет.
Я много чего пробовал. Двумя наиболее многообещающими были выведение всех классов, используемых в этом общем шоу, и их явная передача, попытка изменить все их ключи на целые числа и т. д. И это дало точно такую же ошибку, только с int вместо строки . Другой способ, которым я попробовал, заключался в том, чтобы сделать следующее внутри OnModelCreating, чтобы предоставить IdentityUserLogin первичный ключ, например:
Код: Выделить всё
modelBuilder.Entity()
.Property(login => login.UserId)
.ForMySQLHasColumnType("PK")
.UseSqlServerIdentityColumn()
.UseMySQLAutoIncrementColumn("AI");
IdentityUserLogin является частью иерархии и не имеет значений дискриминатора
Но если бы у меня были значения дискриминатора, в конечном итоге это просто вернулось бы к этой ошибке. Самое странное, на мой взгляд, это то, что у меня ТОЧНО та же реализация, что и в примере UnicornStore на github, которая также использует немного инфраструктуры идентификации .... Так что мне действительно нужна ваша помощь, ребята. Эту ошибку можно воспроизвести, загрузив проект, скопировав default.appsettings.json в appsettings.json, вставив действительную строку подключения, восстановив dotnet, запустив dotnet run --environment Development. .
Я даже пытался изменить реализацию, чтобы использовать базу данных MSSQL вместо MySQL, но это привело к той же ошибке.
Подробнее здесь: https://stackoverflow.com/questions/407 ... be-defined
Мобильная версия