У меня есть 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 по другим причинам.