我想知道如何为生产数据库运行'Update-Database'命令。
“更新 - 数据库”数据库在我的本地计算机上运行良好,但如何使其适用于生产数据?
因此,如果我对我的应用程序进行了更改,然后通过visual studio运行'publish',这对于代码方面的工作正常,但是如何为生产数据运行'Update-Database'命令。
希望这个问题有意义......
谢谢,
答案 0 :(得分:29)
请参阅Using Entity Framework (code first) migrations in production,以便您的应用程序在Entity Framework初始化时自动更新数据库。
现在,如果您更熟悉手动控制迁移,可以使用开发人员计算机上的Update-Database命令的-Script参数生成SQL脚本,然后可以对生产数据库运行。
http://msdn.microsoft.com/en-us/data/jj591621.aspx(请参阅获取SQL脚本部分)
答案 1 :(得分:23)
添加@David已经说过的内容......
就个人而言,我不相信“实时”场景中的automatic updates
,我总是更喜欢手动数据库管理(即创建或改变Db需要permissions
- 更不用说了共享托管等) - 但从我所看到的迁移是非常可靠的同步(事实上,'解开'他们通常的唯一方法是删除Db并强制完全/新的更新)。
这是我前一段时间关于如何script
和synchronize database / code
以及面向部署方案(以及何时出现问题)的帖子。它不适用于你(还),但要记住一些事情。
答案 2 :(得分:4)
您是否只想自动将数据库更新到应用程序运行的任何时间和地点(开发和生产)的最新版本?
这可能不是一个好主意,除非在非常简单的情况下您知道自己可以信任自动迁移并且手动迁移数据库是不可行的。请参阅此答案:https://stackoverflow.com/a/15718190/2279059。如果您忽视此警告,请继续阅读。
将以下内容添加到web.config
:
<entityFramework>
<contexts>
<context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false">
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" />
</context>
</contexts>
这可能看起来很可怕,但它与以下代码基本相同:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());
如果您对web.config
没有运气,那么您也可以尝试将此代码放入Global.asax
。我个人更喜欢配置代码而不是代码。
如果您希望配置文件看起来更干净,您还可以从模板MigrateDatabaseToLatestVersion
类派生一个新类,这样您就不需要使用神秘的语法在{{{{{}中传递类型参数1}}文件:
web.cofig
这样做是为了设置一个数据库初始化程序,它自动将数据库更新到最新版本。
(来源及更多详情:http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html)
答案 3 :(得分:0)
另一个对我有用的解决方案是: 在本地的web.config文件中,我将连接字符串设置为指向生产服务器。
然后,所有PM Console命令将在生产服务器上运行。我可以根据需要update-database
或还原迁移,所做的更改将应用于生产数据库。
答案 4 :(得分:0)
您可以使用生产连接字符串如下运行 Update-Database EF Tools命令:
Update-Database -Args '--environment Production'
来源:https://docs.microsoft.com/en-us/ef/core/cli/powershell#aspnet-core-environment
正如其他人所述,您必须格外小心,您绝对应该首先在登台环境中尝试它。