From fdf5a6ecd6c3d23662fcb9fa2af49ec30b0e89c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Thu, 2 Dec 2021 11:11:14 +0500 Subject: [PATCH] Add startup argument db_init to start just for migrate DB --- AsbCloudInfrastructure/DependencyInjection.cs | 10 ++++++ AsbCloudWebApi/Program.cs | 32 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index 6d6ba6d6..57bead29 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -14,6 +14,15 @@ namespace AsbCloudInfrastructure { public static class DependencyInjection { + public static IAsbCloudDbContext MakeContext(string connectionString) + { + var options = new DbContextOptionsBuilder() + .UseNpgsql(connectionString) + .Options; + var context = new AsbCloudDbContext(options); + return context; + } + public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) { services.AddDbContext(options => @@ -79,5 +88,6 @@ namespace AsbCloudInfrastructure where TImplementation : class, TService => services.AddTransient(implementationFactory) .AddTransient(provider => new Lazy(() => implementationFactory(provider))); + } } diff --git a/AsbCloudWebApi/Program.cs b/AsbCloudWebApi/Program.cs index 73cd343f..420abf0e 100644 --- a/AsbCloudWebApi/Program.cs +++ b/AsbCloudWebApi/Program.cs @@ -1,5 +1,8 @@ using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; +using System; +using System.Linq; namespace AsbCloudWebApi { @@ -8,6 +11,23 @@ namespace AsbCloudWebApi public static void Main(string[] args) { //new TraceListenerView(); // to trace mysterious errors + if(args?.Length > 1 ) + { + if (args.Contains("db_init")) { + var connectionStringName = "DefaultConnection"; + + IConfigurationRoot configuration = new ConfigurationBuilder() + .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) + .AddJsonFile("appsettings.json") + .Build(); + + AsbCloudInfrastructure.DependencyInjection.MakeContext(configuration.GetConnectionString(connectionStringName)); + Console.WriteLine("Успешно выполнено."); + return; + } + WriteHelp(); + } + CreateHostBuilder(args).Build().Run(); } @@ -17,5 +37,17 @@ namespace AsbCloudWebApi { webBuilder.UseStartup(); }); + + private static void WriteHelp() + { + Console.WriteLine("При запуске без ключей программа просто стартует в обычном режиме."); + Console.WriteLine("Ключи для запуска:"); + Console.WriteLine("db_init - создать контекст БД и выйти."); + Console.WriteLine("Контекст создастся для строки подключения \"DefaultConnection\""); + Console.WriteLine("Создание контекста приведет к созданию БД, если ей нет"); + Console.WriteLine("и применению всех миграций, если БД уже есть."); + Console.WriteLine("Для создания контекста в БД должна быть создана схема public"); + Console.WriteLine(""); + } } }