Невозможно разместить API после использования контекста - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь разместить мой API, но он не работает.Проблема появилась после того, как я переместил код инициализации для базы данных в одно место, Основную Программу.Я сузил проблему до того, что любое использование контекста db приведет к тому, что приложение не будет размещаться после выполнения host.Run ().Не выдается никаких исключений, но приложение не размещается должным образом (я не могу получить доступ к URL-адресам API, и приложение не открывает URL-адрес по умолчанию автоматически).

В конце концов я выяснил, выполняю ли я host.Run ()прежде чем использовать какой-либо метод в контексте БД, приложение будет работать.Это не оптимальное решение, и я хотел бы знать, в чем проблема.Методы контекста выполняются должным образом, и я могу добавлять вещи в базу данных, приложение просто не будет размещаться, если я использую контекст перед host.Run ().

public class Program
{
    public static void Main(string[] args)
    {

        var host = CreateWebHostBuilder(args).Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;
            try
            {
                var context = services.GetRequiredService<CashinContext>();
                context.Database.EnsureCreated();
                //DbInitializer.Initialize(context);
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occured while seeding the database.");
            }

        }

        host.Run();

    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

UPDATE Путем изменениякод от,

var context = services.GetRequiredService<CashinContext>();

К,

var context = services.GetService<CashinContext>();

теперь он работает.Я не понимаю почему, потому что GetRequiredService() должен выдавать исключение, когда нет доступной службы, исключение никогда не создавалось.С GetService() функция должна возвращать ноль, когда нет доступной службы.Я проверил это отладкой, и ноль не был возвращен, и все прошло хорошо.

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