我想问你,程序运行时是否可以从代码端迁移和更新数据库(实体框架核心)。 问题是我从Key Vault下载了一个连接字符串。而且连接字符串不能硬编码或在环境变量中。 谢谢您的回答。
当前错误:
字符串参数'connectionString'不能为空。
答案 0 :(得分:0)
您可以使用IHostedService
在启动时执行数据库迁移;
public class DatabaseMigration<T> : IHostedService where T:DbContext
{
private readonly IServiceProvider serviceProvider;
public DatabaseMigration(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
using (var scope = serviceProvider.CreateScope())
{
var db = await scope.ServiceProvider.GetRequiredService<T>();
await db.Database.MigrateAsync();
}
}
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
services.AddHostedService<DatabaseMigration<Context>>();
答案 1 :(得分:-1)
我刚用过:
using (var context = new AzureContext())
{
try
{
context.Database.Migrate();
}
catch (Exception)
{
throw;
}
}