我想知道如何为生产数据库运行“ Update-Database”命令。
“ Update-Database”数据库可以在本地计算机上正常运行,但是如何使它用于生产数据?
因此,如果我对应用程序进行了更改,然后通过Visual Studio运行“发布”,那么对于代码方面的工作就很好了,但是如何对生产数据运行“ Update-Database”命令。
希望这个问题有道理...
谢谢,
我想知道如何为生产数据库运行“ Update-Database”命令。
“ Update-Database”数据库可以在本地计算机上正常运行,但是如何使它用于生产数据?
因此,如果我对应用程序进行了更改,然后通过Visual Studio运行“发布”,那么对于代码方面的工作就很好了,但是如何对生产数据运行“ Update-Database”命令。
希望这个问题有道理...
谢谢,
Answers:
要补充@David已经说过的话...
就个人而言,我不相信automatic updates
“实时”方案,而且我始终更喜欢手动数据库管理(即permissions
创建或更改Db时存在问题-更不用说共享主机了)-但是从我所看到的迁移在同步方面非常可靠(实际上,通常“取消绑定”的唯一方法通常是删除Db并强制执行完整/新更新)。
这是我前一段时间发布的一篇文章,介绍如何script
以及如何synchronize database / code
适应部署方案(以及出现问题时)。它不适用于您(但),但请记住一些注意事项。
请参阅在生产环境中使用Entity Framework(代码优先)迁移,以便在Entity Framework初始化时您的应用程序自动更新数据库。
现在,如果您更愿意手动控制迁移,则可以在开发人员计算机上的Update-Database命令中使用-Script参数来生成SQL脚本,然后可以针对生产数据库运行该脚本。
http://msdn.microsoft.com/zh-cn/data/jj591621.aspx(请参阅获取SQL脚本部分)
您是否只想在应用程序运行(开发和生产)的任何时间和地点自动将数据库更新为最新版本?
这可能不是一个好主意,除非在非常简单的场景中,您知道可以信任自动迁移,而手动迁移数据库是不可行的。请参阅以下答案: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
类派生一个新类,这样就无需使用隐式语法在web.cofig
文件中传递类型实参:
public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}
这是要设置一个数据库初始化程序,该初始化程序会自动将数据库更新为最新版本。
(来源和更多详细信息:http : //www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html)