我是迁移的新手,所以找不到将更改添加到LiveDB的方法。
所以在开发人员中,当我添加到模型中时
PM> add-migration <name>
PM> update-database
但是我该怎么办?我希望可以直接发布\部署并进行迁移,迁移将运行并更新架构,但我想不是:)
Live SQL服务器处于关闭状态,我无法从开发人员框中访问它,只需更改连接字符串并再次执行更新数据库即可。
你们做什么,文档在哪里?
谢谢,
史蒂夫
最佳答案
随样本更新为3.0
Core 3.0方法类似于2.x,但是现在使用了通用主机。
您需要为using Microsoft.Extensions.DependencyInjection;
添加CreateScope()
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var db = scope.ServiceProvider.GetService<ShortenerContext>();
db.Database.Migrate();
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
更新了Core 2.0+的更好方法
迁移应使用诸如EF Core CLI工具之类的工具在Program.cs中运行,该工具会在正常执行中运行启动功能。
这是一个例子:
public class Program
{
public static void Main(string[] args)
{
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var db = scope.ServiceProvider.GetService<ShortenerContext>();
db.Database.Migrate();
}
host.Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
在1.x中运行迁移的一种方法是在应用启动时仅添加以下内容:
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
ShortenerContext db)
{
db.Database.Migrate();
//Rest omitted
}
这将在启动时针对数据库执行所有挂起的迁移。