首先使用实体​​框架代码-如何为生产数据库运行Update-Database


77

我想知道如何为生产数据库运行“ Update-Database”命令。

“ Update-Database”数据库可以在本地计算机上正常运行,但是如何使它用于生产数据?

因此,如果我对应用程序进行了更改,然后通过Visual Studio运行“发布”,那么对于代码方面的工作就很好了,但是如何对生产数据运行“ Update-Database”命令。

希望这个问题有道理...

谢谢,



您可以使用提供的migrate.exe,它位于已安装的Nuget软件包中。请参阅用法:msdn.microsoft.com/en-us/library/jj618307(v=vs.113).aspx
主要

Answers:


25

要补充@David已经说过的话...

就个人而言,我不相信automatic updates“实时”方案,而且我始终更喜欢手动数据库管理(即permissions创建或更改Db时存在问题-更不用说共享主机了)-但是从我所看到的迁移在同步方面非常可靠(实际上,通常“取消绑定”的唯一方法通常是删除Db并强制执行完整/新更新)。

这是我前一段时间发布的一篇文章,介绍如何script以及如何synchronize database / code适应部署方案(以及出现问题时)。它不适用于您(但),但请记住一些注意事项。

MVC3和代码优先迁移-“自创建数据库以来,支持'blah'上下文的模型已更改”


2
为什么这么复杂?在应用程序启动/第一次使用上下文时简单地自动运行迁移代码有什么问题?SQL脚本比调用C#方法更好吗?
弗洛里安(Florian Winter)

1
@FlorianWinter在理想条件和相对简单的情况下,并且如果您知道自己在做什么(例如,数据库管理和迁移表),则为true。但是,您很快就会遇到一些问题,出现不同步等情况。您在那里拥有实时数据,绝不能不惜一切代价。我真的不相信迁移或任何初始化程序都能为我完成这项工作。这来自我多年来看到的无数问题。因此,当我实时获取数据时,我希望完全掌控一切。只有在我重新检查之后,我才能让该应用运行并“自行迁移”。和缩放等等
NSGaga,大多是不活动

点了,我同意。我将添加警告,并将您的答案链接到我的答案,但是我将其保留在那里,因为确实存在这些简单的情况。至少是暂时的...
弗洛里安冬季


5

您是否只想在应用程序运行(开发和生产)的任何时间和地点自动将数据库更新为最新版本?

这可能不是一个好主意,除非在非常简单的场景中,您知道可以信任自动迁移,而手动迁移数据库是不可行的。请参阅以下答案: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


0

另一个对我有用的解决方案是:在本地的web.config文件中,我将连接字符串设置为指向生产服务器。

然后,所有PM Console命令将在生产服务器上运行。我可以update-database根据需要恢复迁移,更改将应用​​于生产数据库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.