2012-02-25 113 views
32

所以我设法让Code First运行,并且效果很好。使用连接字符串进行代码优先迁移

由于我仍在开发应用程序数据库的结构没有最终确定,所以我需要实现迁移。

我跟着Official Blog Post得到了Update-Database命令的工作。

但是,这只会更新数据库的SQLExpress版本。数据库的生产版本位于Azure上,我在运行时指定连接字符串,因此Update-Database命令对此不起作用。

所以我的最后一个问题是:如何将自动迁移应用到生产数据库,其连接字符串是在运行时指定的?

+0

对于那些没有的app.config检查和不使用PM控制台,看到这个帖子http://stackoverflow.com/questions/15504465/entityframework-code-first-custom-connection-string-and-migrations/16133150# 16133150 – 2013-04-22 06:52:07

回答

49

在包管理器控制台类型:

Get-Help Update-Database

相关部分:

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com 
monParameters>] 

所以,你可以做一个Update-Database -ConnectionStringName "MyConnectionString",它应该工作就像一个魅力。你也有一个MigrateDatabaseToLatestVersion数据库初始值设定项,如果你设置它(通过Dabase.SetInitializer()),当你用合适的连接字符串在生产环境中部署你的应用时,在第一次数据库访问时,它应该自动地将你的数据库迁移到最新版本。

我建议谨慎,但总是要备份东西。

更新

@Alexy Strakh最近的评论催生了另一种说法值得投入的答案。

使用Code First Migrations正确配置部署系统,给定为2 ConnectionString s。

  1. 定义在web.config中的连接字符串(PROD和DEV),使用默认口令的
  2. 让你的应用程序的配置系统了解PROD和DEV连接配置,可选创建单元测试,以保证正确的拾取*
  3. 录用config file transformation并让它改变你的web.config成一个具有生产价值
  4. 部署你的包生产(this should be the most cutting edge way

您不应该与您的开发箱中的生产环境进行交互,但是如果您真的需要,那么将其作为一个临时解决方案,需要在完成后立即恢复。

另一种方法是简单地使用Web.Debug.config和Web.Release.config,并为主web.config(这是您在源代码管理中签入的唯一一个)提供一个中央模板。

只要确保从不检查生产密码或个人开发密码(如果有任何 )。

*您可以使用DEBUG符号来检查应用程序的运行方式。

+0

我有一个在web.config和web.release.config中指定的默认web.config和prod db连接中指定的开发数据库。我想用prod而不是dev,我可以这样做吗? – 2016-05-08 08:33:07

+0

是的,尽管如此,但请记住,实体框架(或任何存储技术)的责任不在于了解您的dev/staging/production的配置逻辑。 我认为你需要的是配置文件转换。 https://msdn.microsoft.com/en-us/library/dd465318%28v=vs.100%29.aspx – WDRust 2016-05-08 21:18:55

+0

也就是说,假设你想沿着这条路线走下去。如果你有更多的细节或要求,你应该提出另一个问题(请随时联系我) – WDRust 2016-05-08 21:20:46