2012-05-30 55 views
19

我學習EF4.3遷移,我已經讀ado.net團隊博客這兩篇文章:自動遷移VS代碼庫遷移

http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx

但讀後這兩篇文章中,我仍然不清楚它們之間以及何時使用基於代碼的migraion之間的區別,以及何時使用自動遷移。任何人都可以指導我?

謝謝!

+3

我討厭MS如何簡單地挪用詞彙。有些人認爲「代碼遷移」是指「將代碼從一種語言/平臺轉換爲另一種語言/平臺」,而「自動遷移」意味着「自動執行代碼遷移」。 –

+0

@IraBaxter讓我想起了DDD中有界上下文的主題。 http://martinfowler.com/bliki/BoundedContext.html –

+0

鏈接似乎不再工作,有沒有關於此的最新文章? –

回答

22

這些文章非常清楚,所以如果你不明白其中的差異,那就意味着你在閱讀文本時並沒有集中注意力,而且你也可能沒有按照自己的代碼編寫文本。

自動遷移只是一個神奇的工具。您運行應用程序,並且始終將數據庫置於最新版本中,因爲EF會在每次需要時執行隱式遷移 - 在最純的版本中,除了啓用自動遷移外,您無需執行任何操作。

自動遷移有時是不夠的。您需要爲遷移代碼添加一些定製,或者運行一些其他SQL命令來轉換數據。在這種情況下,您可以通過調用Add-Migration命令添加顯式的基於代碼的遷移。顯式遷移顯示將在遷移期間執行的所有遷移代碼(沒有額外的魔術)。

如果關閉自動遷移,則必須始終定義顯式遷移,以便在定義明確的步驟中定義數據庫升級過程。這對於需要同時升級和降級到特定版本的情況特別有用。

+1

當@Ladislav Mrnka說「自動遷移有時不夠」時,您能否指出我未列出自動遷移處理的情景列表?我曾在互聯網上多次看到過這樣的說法,即使在官方的[EF 5文檔](http://msdn.microsoft.com/en-US/data/jj554735)中也是如此,但從來沒有列出給出的限制。 –

+2

@Steven:你不會在任何地方找到限制列表。有時候,例如,您可以進行更改,而不需要更改表結構,也可以轉換數據 - 這需要在您手動處理數據的情況下進行代碼遷移。有時候你想添加更多的SQL特性 - 索引,約束atc。再次,只有在代碼遷移時纔有可能。大多數情況下,您需要使用'Sql'或'CreateIndex'或'DropIndex'方法調用代碼遷移。 –

+0

感謝您提供一些指導。 –

-2

MSDN有更多關於您的問題的信息。他們不建議在團隊開發場景中混用自動和基於代碼的遷移。但我不清楚它可以創造什麼問題。