Подключение и миграция базы данных для Entity Framework Core с использованием Key Vault и Package Manager Console - PullRequest
1 голос
/ 26 февраля 2020

Я изменил свой appSettings.config, чтобы больше не иметь строки подключения, так как теперь они все находятся в Azure Key Vault. Мне не удалось подключиться без проблем, но теперь, когда я пытаюсь создать БД с использованием кода EF, сначала выполняются миграции в новый azure БД с использованием

add -igration InitialCreate

Value cannot be null.
Parameter name: connectionString

Я получаю сообщение об ошибке:

        public Startup(IHostingEnvironment env)
    {
        AutomapperConfiguration.Configure();
        _hostingEnvironment = env;
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", false, true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
            .AddEnvironmentVariables();

        if (env.EnvironmentName == Constant.EnvironmentName_QA || env.EnvironmentName == Constant.EnvironmentName_Staging || env.EnvironmentName == Constant.EnvironmentName_Production)
            env.ConfigureNLog($"nlog.{env.EnvironmentName}.config");
        else
            env.ConfigureNLog($"nlog.config");


        builder.AddAzureKeyVault(Configuration["AzureVault:Vault"], Configuration["AzureVault:ClientId"], Configuration["AzureVault:ClientSecret"]);

        Configuration = builder.Build();

      }




Configuration(){
.
.
.
services.AddDbContext<SafeContext>(options => options.UseSqlServer(Configuration[Configuration["AzureVaultKeys:DBConnectionString"]]));
.
.
.
}

1 Ответ

0 голосов
/ 27 февраля 2020

Согласно моему тесту, мы можем использовать следующие шаги для реализации миграций

  1. Установить SDk
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.2">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.2" />

Код

a. Program.cs

 public static void Main(string[] args)
   {

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

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

       host.Run();
   }

   public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
   .ConfigureAppConfiguration((context, config) =>
   {

       config.SetBasePath(context.HostingEnvironment.ContentRootPath)
              .AddJsonFile("appsettings.json", false, true)
              .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", true)
              .AddEnvironmentVariables();
       var builtConfig = config.Build();
       config.AddAzureKeyVault(
                   $"https://{builtConfig["KeyVault:Vault"]}.vault.azure.net/",
                   builtConfig["KeyVault:ClientId"],
                   builtConfig["KeyVault:ClientSecret"],
                   new DefaultKeyVaultSecretManager());


   })
   .ConfigureWebHostDefaults(webBuilder =>
   {
       webBuilder.UseStartup<Startup>();
   });

b. Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<SchoolContext>(options =>
    options.UseSqlServer(Configuration["<your secret name>"])); //For example you secret name is ConnectionStrings--DefaultConnection, the code is  Configuration["ConnectionStrings:DefaultConnection"]  
        services.AddControllersWithViews();
    }

3 перенос

add-migration InitialCreate

enter image description here

Для получения более подробной информации, пожалуйста, обратитесь до

https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-3.1

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro?view=aspnetcore-3.1

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