我有一个在本地运行的完整 Web 应用程序,我现在正致力于将其投入生产。该应用程序目前位于 Azure 上,并正在查看用于新部署的 git 存储库,效果很好。
但是,应用程序在其 appsettings.json
中有一个连接字符串的连接,如下所示:
"database": {
"connection": "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=Foo"
},
// In Startup()
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
// In ConfigureServices(...)
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<FooDbContext>(options =>
{
options.UseSqlServer(Configuration["database:connection"]);
});
这对于本地测试来说很好,但现在我准备转向生产并有一些问题(找不到好的文档)。
dnx
命令行将更改推送到生产数据库?一切都静态地绑定(bind)到应用程序定义的数据库,因此默认情况下它会始终转到我的本地数据库。 最佳答案
基本
你说过你有两个配置。一个用于本地,一个用于生产,每个都有一个连接字符串。在这种情况下,如果你的生产配置被称为 appsettings.production.json
你可以这样做:
启动()
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
配置服务(...)
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<FooDbContext>(options =>
{
options.UseSqlServer(Configuration["database:connection"]);
});
appsettings.production.json
{
"database": {
"connection": "Server=tcp:yr3d5dswl.database.windows.net,1433;Database=EFMigrationDemo;User ID=mvp2015@yr3d5dswl;Password=3f4g%^BD45bcE;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
}
}
命令行
dotnet ef database update -e Production
这将更新您的生产数据库。
先进的
与您的持续集成集成。通过向 project.json 添加
postbuild
脚本,让迁移更新构建时的实时数据库。 Azure 将在每次部署时运行它。"scripts": {
"postbuild": [ "dotnet ef database update" ]
}
如果要使用环境变量而不是
appsettings.production.json
文件,请查看 Setting the SQL connection string for ASP.NET 5 web app in Azure 。这使您的用户名/密码远离您的 git 存储库。引用
关于asp.net - 使用 ASP.NET Core 和 EntityFramework 7 通过 Azure 中的迁移更改更新生产数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36453814/