2011-04-27 51 views
2

我目前正在開發一個EFCF(EF代碼優先)和MVC3的小應用程序。看來EFCF對開發原型或v1應用程序非常有用。 v1發佈後,我部署的數據庫會發生什麼?我將如何去部署一個v1 ++?特別是DB。如何從EF代碼首先轉移到更傳統的開發策略?

隨着EFCF我有2種模式可用,重新創建如果不同或總是重新創建。沒有「差異」模式保留我的數據和補丁模型更改。我將如何去做這件事?我想我可以用v1 ++ DB來區分v1 DB,然後轉到該路線,或者我可以從EFCF遷移出去,然後轉到修改數據庫的更傳統路線,然後更新我的POCO以反映更改。問題是我不太瞭解後者,也無法制作合適的Google查詢。

回答

1

看來,EFCF對於開發原型或v1應用程序非常有用。

賓果。目前,雖然EF4.1正在進行「遷移」和「模式演變」,但EF4.1並沒有任何真正的版本功能。看看「什麼不支持」here。個人而言,我非常喜歡代碼映射,所以我的建議是,一旦您的初始架構就位,您將通過(a)修改數據庫,(b)修改您的POCO,然後(c )修改你的代碼優先映射。當然,你會告訴你的數據庫對象永遠不要放棄你的數據庫。

對於大的模式更改,這可能很容易出錯,但它現在必須執行。

3

任何用於數據遷移的自動工具仍然是不應該觸及生產數據庫的。代碼優先的方法是用於開發。將代碼移動到生產環境後,應該關閉數據庫生成功能,並且在升級到新版本時應該爲數據庫創建更改腳本。您可以使用一些幫助工具爲您創建diff腳本 - 例如VS數據庫工具(VS 2010 Premium或Ultimate)或Red Gate工具。

0

我認爲你需要遷移EFCF功能。

不丟失數據而改變車型能夠與數據丟失的自動遷移允許的最簡單的方法:

internal sealed class Configuration : DbMigrationsConfiguration<YourFancyDBContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

...

Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourFancyDBContext, Configuration>()); 

事實上,它需要幾個步驟第一: http://msdn.microsoft.com/en-US/data/jj591621