2012-02-25 115 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