Не удается добавить миграцию после миграции на ASP.Net Core Identity 2.1 - PullRequest
0 голосов
/ 27 сентября 2018

Я перенес свое приложение из .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 ]

0 голосов
/ 02 октября 2018

Похоже, у меня остались некоторые отношения от моих сущностей в сущности ASP.Net Identity.Кажется, я не очищал их при переключении с унаследованной пользовательской сущности Identity.Я также добавил еще два конструктора в мой DBContext, которые не используют общие параметры, а по умолчанию.Это исправило то, что я теперь могу добавлять миграции с помощью комментария, показанного в моем вопросе.

0 голосов
/ 27 сентября 2018

Я не уверен, но попробуйте заменить вашу первую строку следующим:

public class ApplicationDbContext : IdentityDbContext<IdentityUser>
...