EF Core 2.1 Таблицы идентичности пустые после заполнения HasData () - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь заполнить свои таблицы идентификаторов шаблоном HasData EF Core 2.1, код выполняется, но в таблицы ничего не вставляется.
Мой код класса DBContext:

public partial class IdentityDBContext : IdentityDbContext<IdentityUser>
{
    public IdentityDBContext(DbContextOptions<IdentityDBContext> options)
        : base(options)
    {
    }

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

        IdentityRole RootRole = new IdentityRole 
        { 
            Id = Guid.NewGuid().ToString(), 
            Name = IdentityDBContext.RoleTypes.RootAdmin, 
            NormalizedName = "Root Admin" 
        };
        builder.Entity<IdentityRole>().HasData(RootRole);

        IdentityUser AdminUser = new IdentityUser 
        { 
            Id = Guid.NewGuid().ToString(), 
            UserName = "m@soze.biz", 
            Email = "m@soze.biz", 
            NormalizedUserName = "m@soze.biz".ToUpper(), 
            NormalizedEmail = "m@soze.biz".ToUpper(), 
            EmailConfirmed = true 
        };
        builder.Entity<IdentityUser>().HasData(AdminUser);

        builder.Entity<IdentityUserRole<string>>().HasData(new IdentityUserRole<string> 
        { 
            UserId = AdminUser.Id, 
            RoleId = RootRole.Id 
        });
    }
}

В Startup.cs в методе Configure у меня есть:

using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
    var IdentityContext = serviceScope.ServiceProvider.GetRequiredService<IdentityDBContext>();
    IdentityContext.Database.Migrate();
}

Я могу пошагово выполнить код OnModelCreating, выполняющийся без исключения, однако записи не добавляются в таблицы, и AspNetUsers, и AspNetRoles пусты.

Есть предложения, почему это не работает?

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Согласно ответу Дао, если вы создали проект с шаблоном Visual Studio и добавили аутентификацию в качестве опции, миграции уже будут добавлены. Метод «HasData» не выполняется на этапе «Обновление базы данных», он выполняется на этапе «Добавить-миграция» и добавляется в вашу миграцию. Вам нужно удалить папку «Миграции», а затем запустить «Add-Migration CreateIdentitySchema» в порядке командного окна пакета, чтобы ваши начальные данные были применены к миграции. Update-Database затем запустит ваши данные из новой миграции. Это сводило меня с ума на 3 часа в одно воскресенье.

0 голосов
/ 21 ноября 2018

По вашей причине, Migrate применил только ожидающие миграции, он не обнаружит изменения после изменения IdentityDBContext.

Когда вы создаете проект с Identity, он автоматически создает первые миграции, а затем, даже через, вы изменили IdentityDBContext, Migrate будет применять только первые миграции без других ваших операций.

Вот два варианта для вас:

  • Для первой инициализации базы данных, вы можете попробовать код ниже, который будет заполнять данные.

            using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
        {
            var IdentityContext = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
            IdentityContext.Database.EnsureCreated();
        }
    
  • Второй вариант - вы уже пробовали.Перед запуском Migrate запустите Add-Migration, чтобы сгенерировать миграции для новых изменений.

...