2012-07-31 25 views
1

所以我使用實體框架代碼第一次遷移。EF Code First Migrations - 它如何記住以前的模型更改?

我對我的模型進行了更改,添加了一個新的手動遷移,並且它獲得了錯誤的向上腳本。

所以我刪除了遷移,同時我不會按照我的想法改變它。在刪除遷移課程並重置模型(即將模型恢復原樣)後,我再次更改模型。

當我生成一個新的遷移時,這個遷移的行爲就像是從我刪除的那個遷移過來的。

如果清理並刪除遷移,實體框架代碼如何知道最後模型狀態?

你如何重置?

+0

您是否在刪除之前執行遷移? – 2012-07-31 12:42:04

+0

不 - 這就是爲什麼我迷失在它「知道」我以前有過一個。原本以爲這是一些「obj」文件或類似的文件,但乾淨的沒有做任何事情 – Doug 2012-08-01 10:13:21

回答

0

您可能沒有刪除它下面的設計器文件,其中包含有關自動遷移的信息,直到此刻。

http://msdn.microsoft.com/en-US/data/jj554735

運行Add-遷移AddBlogRating命令

遷移也有一個代碼隱藏文件,捕捉一些元數據。這個元數據將允許Code First Migrations複製我們在基於代碼遷移之前執行的自動遷移。如果另一個開發人員想要運行我們的遷移或部署我們的應用程序時,這一點非常重要。

代碼隱藏文件類似於201206292305502_AddBlogRating.Designer.cs文件,位於您創建的手動遷移類下面。它看起來像:

public sealed partial class AddBlogRating : IMigrationMetadata 
{ 
    string IMigrationMetadata.Id 
    { 
     get { return "201206292305502_AddBlogRating"; } 
    } 

    string IMigrationMetadata.Source 
    { 
     get { return "H4sIAAAAAAAEAOy9B2AcSZ...=="; } 
    } 

    string IMigrationMetadata.Target 
    { 
     get { return "H4sIAAAAAAAEAOy9B2AcSZ...=="; } 
    } 
} 

這2個字符串是在遷移之前和之後編碼整個模型的轉儲的base64。這個想法是,之前的第一手動遷移任何記錄是自動的,所以,當你申請這一切到一個新的DB它可以看看,並說:

手動1
手冊2

檢查源代碼,以確定之前的目標模式Manual1,使用Automatic方法應用,應用Manual1,檢查Manual2上的Source,使用自動方法到達那裏,應用Manual2,最後使用自動方法從那裏獲取當前編譯模型狀態。

2

在您的數據庫的「表/系統表」下(假設您使用SQL Management Studio),編輯Table __MigrationHistory

在我刪除了所有遷移* .cs文件後仍然讓我迷迷糊糊,並且VS仍然「知道」了舊遷移!