#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() .Build();
Комментариев нет:
Отправить комментарий