Как я могу использовать Entity Framework Core CLI 3.0 для применения миграции со строкой подключения к БД в Azure Key Vault, в ASP. NET Core WebAPI? - PullRequest
0 голосов
/ 11 июля 2020

У меня есть ASP. NET Core WebAPI, и я хочу использовать Entity Framework для управления БД. Строка подключения хранится в KeyVault, доступ к ней осуществляется через MSI, и я использую Unity для внедрения зависимостей.

Я хочу иметь возможность запускать dotnet ef database update из командной строки, чтобы применить мои миграции.

Вот мой соответствующий код:

Startup.DependencyInjection.cs

// Our custom KeyVault class
var keyVaultProvider = new KeyVaultMsiSecretsProvider(configuration["KeyVault:EndpointUrl"]);

container.RegisterType<MyDbContext>(
    new ContainerControlledLifetimeManager(),
    new InjectionConstructor(keyVaultProvider.GetSecret(configuration["SqlDb:ConnectionString"])));

MyDbContext.cs

public class MyDbContext: DbContext
{
    private readonly string connectionString = "stubValue";

    public DbSet<MyEntity> Entities { get; set; }

    public MyDbContext() { }

    public MyDbContext(string connectionString)
    {
        this.connectionString = connectionString;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlServer(connectionString);
}

Примечание. Строка stubValue была здесь требуется, так как CLI жаловался, что это поле не может быть пустым при создании миграций.

appSettings. json

{
    "KeyVault": {
        "EndpointUrl": "https://mykeyvault.vault.azure.net/"
    },
    "SqlDb": {
        "ConnectionString": "MySqlConnectionStringSecretName"
    },
}

Прямо сейчас я получаю сообщение об ошибке при запуске dotnet ef database update: Format of the initialization string does not conform to specification starting at index 0.

Могу ли я применить миграции с моего терминала? Я знаю, что в EF Core 5.0 они добавляют параметр --connection для обновления, но, к сожалению, я пока застрял на версии 3.0 по другим причинам.

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