Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

asp.core2 не работает пример инициализации базы данных из документации microsoft

#c_sharp #entity_framework #aspnet_core #dependency_injection #entity_framework_core


На сайте Microsoft в разделе документации asp.core 2, приводится пример инициализации
базы данных тестовыми данными.

Сначала я регистрирую контекст базы данных в ConfigureServices с помощью такого кода

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext(options =>
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddMvc();
}


Затем получаю контекст базы данных из контейнера внедрения зависимостей.

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args).Configure(_ => { }).Build();

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

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        try
        {
            var context = services.GetRequiredService();
            DbInitializer.Initialize(context);
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService>();
            logger.LogError(ex, "An error occurred while seeding the database.");
        }
    }

    host.Run();
}


У меня не работает и я думаю это логично, т.к. метод Main вызывается быстрее метода
ConfigureServices и естественно var context = services.GetRequiredService();
 ничего не вернет.

После запуска получаю ошибку

{System.InvalidOperationException: No service for type 'DreamPlace.WebService.Otli.Statistic.Models.SchoolContext'
has been registered.
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider
provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider
provider) ...}


Может я чего-то не понял или это действительно ошибка в документации microsoft?
    


Ответы

Ответ 1



Как указал tym32167, у меня неверный метод BuildWebHost. Правильный вариант: IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .Bui‌​ld();

Комментариев нет:

Отправить комментарий