所以我使用實體框架代碼第一次遷移。EF Code First Migrations - 它如何記住以前的模型更改?
我對我的模型進行了更改,添加了一個新的手動遷移,並且它獲得了錯誤的向上腳本。
所以我刪除了遷移,同時我不會按照我的想法改變它。在刪除遷移課程並重置模型(即將模型恢復原樣)後,我再次更改模型。
當我生成一個新的遷移時,這個遷移的行爲就像是從我刪除的那個遷移過來的。
如果清理並刪除遷移,實體框架代碼如何知道最後模型狀態?
你如何重置?
所以我使用實體框架代碼第一次遷移。EF Code First Migrations - 它如何記住以前的模型更改?
我對我的模型進行了更改,添加了一個新的手動遷移,並且它獲得了錯誤的向上腳本。
所以我刪除了遷移,同時我不會按照我的想法改變它。在刪除遷移課程並重置模型(即將模型恢復原樣)後,我再次更改模型。
當我生成一個新的遷移時,這個遷移的行爲就像是從我刪除的那個遷移過來的。
如果清理並刪除遷移,實體框架代碼如何知道最後模型狀態?
你如何重置?
您可能沒有刪除它下面的設計器文件,其中包含有關自動遷移的信息,直到此刻。
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,最後使用自動方法從那裏獲取當前編譯模型狀態。
在您的數據庫的「表/系統表」下(假設您使用SQL Management Studio),編輯Table __MigrationHistory
。
在我刪除了所有遷移* .cs文件後仍然讓我迷迷糊糊,並且VS仍然「知道」了舊遷移!
您是否在刪除之前執行遷移? – 2012-07-31 12:42:04
不 - 這就是爲什麼我迷失在它「知道」我以前有過一個。原本以爲這是一些「obj」文件或類似的文件,但乾淨的沒有做任何事情 – Doug 2012-08-01 10:13:21