Не удается добавить миграцию после миграции на ASP.Net Core Identity 2.1
Я перенес свое приложение из.Net Core 1.1, EF Core 1.1, ASP.Net Identity 1.1 на все версии 2.1. Я также отделил своего собственного пользователя (в настоящее время называется Diver
) из IdentityUser, поэтому мне не нужно предоставлять пользовательский класс для ASP.Net Idenentity-EF.
Когда я сейчас пытаюсь добавить начальную миграцию с:
dotnet ef migrations add initial -s . -p ../Tauchbolde.Common/
Я получаю ошибку:
The entity type 'IdentityUserLogin<int>' requires a primary key to be defined.
Мой контекст выглядит так:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{ }
public DbSet<Event> Events { get; set; }
public DbSet<Participant> Participants { get; set; }
public DbSet<Comment> Comments { get; set; }
public DbSet<Diver> Diver { get; set; }
public DbSet<Notification> Notifications { get; set; }
public DbSet<Post> Posts { get; set; }
public DbSet<PostImage> PostImages { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// ApplicationUser
builder.Entity<Diver>()
.HasMany(e => e.Notificationses)
.WithOne(e => e.Recipient)
.OnDelete(DeleteBehavior.Restrict);
builder.Entity<Diver>()
.HasMany(e => e.Comments)
.WithOne(e => e.Author)
.OnDelete(DeleteBehavior.Restrict);
builder.Entity<Diver>()
.HasMany(e => e.Events)
.WithOne(e => e.Organisator)
.OnDelete(DeleteBehavior.Restrict);
builder.Entity<Diver>()
.HasMany(e => e.Posts)
.WithOne(e => e.Author)
.OnDelete(DeleteBehavior.Restrict);
builder.Entity<Diver>()
.HasMany(e => e.Claims)
.WithOne()
.HasForeignKey(e => e.UserId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<Diver>()
.HasMany(e => e.Logins)
.WithOne()
.HasForeignKey(e => e.UserId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<Diver>()
.HasMany(e => e.Roles)
.WithOne()
.HasForeignKey(e => e.UserId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
// Comment
builder.Entity<Comment>().HasOne(e => e.Event).WithMany(e => e.Comments).OnDelete(DeleteBehavior.Restrict);
// Event
builder.Entity<Event>().HasIndex(p => new { p.StartTime, p.Deleted });
builder.Entity<Event>().Property(e => e.Deleted).HasDefaultValue(false);
builder.Entity<Event>().Property(e => e.Canceled).HasDefaultValue(false);
// Notification
builder.Entity<Notification>().Property(e => e.AlreadySent).HasDefaultValue(false);
builder.Entity<Notification>().Property(e => e.CountOfTries).HasDefaultValue(0);
// Participants
builder.Entity<Participant>().HasOne(e => e.Event).WithMany(e => e.Participants).OnDelete(DeleteBehavior.Restrict);
builder.Entity<Participant>().Property(e => e.CountPeople).HasDefaultValue(1);
// Post
builder.Entity<Post>().HasIndex(p => new { p.Category, p.PublishDate });
// PostImage
// UserInfo
builder.Entity<Diver>().Property(e => e.NotificationIntervalInHours).HasDefaultValue(1);
}
Весь исходный код можно найти здесь, на GitHub.
Я уже пробовал много вещей, таких как добавление операторов игнорирования для сущностей Identity. Ничего не сработало, и я застрял.
Есть идеи, что может пойти не так?
2 ответа
Похоже, у меня остались некоторые отношения от моих сущностей в сущности ASP.Net Identity. Кажется, я не очищал их при переключении с унаследованной пользовательской сущности Identity. Я также добавил еще два конструктора в мой DBContext, которые не используют общие параметры, а параметры по умолчанию. Это исправило то, что я теперь могу добавить миграцию с комментарием, показанным в моем вопросе.
Я не уверен, но попробуйте заменить вашу первую строку на это:
public class ApplicationDbContext : IdentityDbContext<IdentityUser>