2013-06-20 183 views
1

最初代碼首先意味着您創建一個包含代碼的模型,然後它爲您生成一個數據庫。被代碼優先遷移困惑

隨着遷移它現在看起來像我添加/更改模型,然後我必須手動描述使用新API的變化。

這是正確的嗎?

回答

1

實際上沒有正確的 - 但有責任,可能是混亂的一些重疊。

有點簡化 - 最初的EF,代碼首先沒有考慮增量代碼/型號變化

遷移是爲了解決這個問題而引入的 - 基本上可以幫助您實現典型的開發生命週期,您的代碼和模型將通過不同的版本(以及分期,生產考慮)發展。

遷移將__MigrationHistory表添加到您的Db中 - 遷移是您的數據庫,代碼模型和該表(保存並跟蹤歷史記錄)之間的「樹形方式」同步過程。

但是,它並沒有改變代碼的性質 - 所有的變化都會自動檢測到併爲您編寫腳本(這是整個點) - 也自動應用(從代碼中,w/o PS)如果您使用MigrateDatabaseToLatestVersion Db初始值設定項。

所有你需要做的是什麼是正常預期的你作爲一個開發商 - 到那種把「檢查點」在你的代碼模型 - 和創建遷移 - 當你真正覺得時間是正確的那。 你可以通過PS控制檯來做到這一點。

然後,您可以在開發機器或任何其他已部署的應用程序上通過控制檯應用該遷移 - 或者從代碼自動執行該遷移。

這裏是我的一篇文章,我爲遷移做了一種hands on演練 - 可能出現的問題,以及所有我能想到的地方。

Code first create tables

或這一個...
MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"

1

我將嘗試「非混淆」你:)

有兩個獨立的部分組成:的EntityFramework和遷移。

在Entity Framework中創建模型併爲您生成數據庫。但是,如果您對模型進行了更改,則需要手動更新數據庫,否則EntityFramework將向您拋出錯誤。這就是Code First Migration的功能。它可以手動或自動地爲您管理數據庫升級。

遷移是可選的,但是可以避免直接的SQL交互。

請參考http://msdn.microsoft.com/en-us/data/jj591621.aspx