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