2013-04-25 33 views
0

我的模式已經發展了多次迭代。我有一套遷移過程,將架構從一個空的數據庫轉移到數十個表格和數十列的數據庫中。EF遷移 - 直最終架構

一路上不斷有表,列和約束的一些補充,有時還會(在經驗和新的知識或規範的改變光)通過去除或改變。有時候表或列名已被重新使用或重新使用。

現在,EF遷移似乎完全能夠通過創建,更改,刪除的順序運行,再次創建,變更等,以獲得最新的架構,但感覺不對。在極端情況下,可能會有數十個遷移創建表,然後是數十個刪除表,直到最終的模式可能是一個或兩個表(不太可能,我知道)。從頭開始到最終表格的選項都是正確的。

在我的Ruby天ActiveRecord的遷移有隻建了最終方案,而無需通過步進,並可能撤銷或沿途重做工作的選項。當然,這意味着在每次遷移後保持模式的完整DDL版本是最新的,但不知何故,它會更加優雅。

任何人做實體框架類似的事情?

+0

取決於目標模式的狀態。你的意思是一個新的空模式。或者現有的產品架構? – 2013-04-25 12:34:24

+0

我在考慮啓動一個新數據庫的情況 - 也許只是作爲一個測試或演示,或者當您滿意系統準備就緒並且您想要在客戶的實時服務器上創建數據庫時,或者可能直接跳轉到2.0版本以供新客戶使用。 – 2013-04-25 12:49:40

回答

0

您可能想嘗試刪除數據庫中的__MigrationHistory表,刪除Migrations文件夾(備份Configuration.cs文件),然後再次啓用遷移。

+0

不確定你是否明白我的意思......我可以肯定整個遷移線索的核心思想,並重新開始讓EF向我展示基於當前模型集建立新模式所需的代碼 - 至少直到我已部署到第一個活動實例。在ruby世界中,ActiveRecord有效地維護了一個特殊的單一遷移Up()方法,它將清空數據庫並重新創建所有內容。這個rake任務被稱爲「rake db:schema:load」作爲「rake db:migrate」的替代方法。遷移是保留的,所以你可以(如果你想)加載模式,然後向下遷移5個步驟。 – 2013-04-25 12:09:55

+0

是的,在這種情況下,您將會重新開始並創建1個初始遷移,從而使您獲得當前模式,因此無法回滾遷移。如果您對1次遷移不滿意,那麼您可以手動整理現有的遷移類文件。 – devdigital 2013-04-25 12:48:33

0

然後從這裏開始的PM命令來構建腳本

Generate full SQL script from EF 5 Code First Migrations

從代碼中,沒有對ObjectContext的一個選項不是直接的DbContext

string script = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript(); 

當然,如果自動遷移將工作你不需要看到魔法並改變了生成的腳本。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourDbContext, 
          YourMigrationConfiguration>() 
    Context.Database.Initialize(true); 

而且如果是EmptyDb Schema,EF將免費提供。

Context.Database.Initialize(true);