Entity Framework Core запустить семя - PullRequest
0 голосов
/ 06 июля 2018

Я использую EF Core для создания AppDBContext и AppDbContextSeed:

AppDbContextSeed

public class AppDbContextSeed
{
    private readonly AppDbContext _dbContext;
    private UserManager<AppUser> _userManager;
    private RoleManager<AppRole> _roleManager;

    public AppDbContextSeed(AppDbContext dbContext, UserManager<AppUser> userManager,
        RoleManager<AppRole> roleManager)
    {
        _dbContext = dbContext;
    }

    public async Task Seed()
    {
        ...
        await _dbContext.SaveChangesAsync();
    }
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<AppDbContextSeed>();
}

Program.cs

public static void Main(string[] args)
{
    var host = BuildWebHost(args);

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;

        try
        {
            var appDbContextSeed = services.GetService<AppDbContextSeed>();
            appDbContextSeed.Seed().Wait();
        }
        catch (Exception ex)
        {
            var logger = services.GetService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database");
        }
    }

    host.Run();
}

Когда я запускаю add-migration и update-database, данные из appDbContextSeed не вставляются в базу данных. Что я сделал не так?

1 Ответ

0 голосов
/ 06 июля 2018

Вы помещаете свое начальное выполнение в метод Main, который запускается только при запуске приложения. Если вы хотите, чтобы ваш метод заполнения выполнялся одновременно с выполнением команды update-database, вам необходимо следовать новой функции заполнения данных в EF Core 2.1. Эта функция добавляет новый метод в конфигурацию объекта HasData, который позволяет добавлять некоторые исходные данные.

Это выдержка из Data Seeding Документация по функциям:

Заполнение данных позволяет предоставить исходные данные для заполнения базы данных. В отличие от EF6, в EF Core данные заполнения связаны с объектом. введите как часть конфигурации модели. Тогда EF Core может мигрировать автоматически вычислять, какие операции вставки, обновления или удаления необходимы применяется при обновлении базы данных до новой версии модели.

Я рекомендую вам прочитать документацию, чтобы узнать, как использовать эту новую функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...