3

這是一個有關asp.net mvc 5中代碼優先遷移的稍微奇怪的問題。我有一個正在進行的項目,我使用手動遷移來更新我的數據庫。如果我做任何事情,在我的模型改變了數據庫結構,然後我進入包管理器控制檯,然後輸入我可以在ASP.NET MVC中重命名代碼優先遷移5

add-migration "MigrationName"

但一路走來,我已經叫我的兩個遷移錯了名字的。我想更正每個名稱,但是我想確保這不會影響它們的完整性,我只打算重命名文件名的第二部分(描述性部分)而不是時間戳。

比如我有以下名字:

201411190809335_CreateStageTypeRender

但它應該已經閱讀

201411190809335_CreateSeatingTypeRender

,如果我沒有在未來,現在改名字,我可能目標因爲我將其命名爲錯誤,因此意外移民。

看來,如果在它不是一個重要項目的情況下,我將它們重命名過,那個視覺工作室就會重命名任何子文件(.cs,.resx)。所以看起來這不會是一個問題,再加上時間戳會保持同步,以便讓它們保持有序。

問:還有什麼我應該考慮的。重命名遷移文件名的描述部分可以嗎?

BTW ..我也可以去Designer.cs文件中,並從命名獲取返回值:

public sealed partial class CreateStageTypeRender : IMigrationMetadata 
    private readonly ResourceManager Resources = new ResourceManager(typeof(CreateStageTypeRender)); 
    string IMigrationMetadata.Id 
    { 
     get { return "201411190809335_CreateStageTypeRender"; } 
    } 

public sealed partial class CreateSeatingTypeRender : IMigrationMetadata 
    private readonly ResourceManager Resources = new ResourceManager(typeof(CreateSeatingTypeRender)); 
    string IMigrationMetadata.Id 
    { 
     get { return "201411190809335_CreateSeatingTypeRender"; } 
    } 

最後,我已經進入了數據庫,並更名與舊遷移名稱相對應的記錄,並將其更改爲反映新遷移名稱。否則,我認爲EF/Visual Studio會認爲有沒有新的遷移。

我想我已經覆蓋了所有的基地。如果您認爲我錯過了任何東西,或者由於某種原因這不是一個好主意,請告訴我。

+0

你有過這種技術的任何問題,因爲你第一次嘗試過嗎? – madamission 2015-07-19 12:31:52

+0

但是我沒有遇到任何問題,我也從未針對這些遷移。我認爲最終的測試將是開始一個新項目,快速設置數據庫並進行一些遷移,然後返回並手動重命名它們,進行更多遷移和更新,然後嘗試回滾到其中一個重命名的遷移。那怎麼樣,我們哪個人可以先找到時間來做這件事,回到這裏並留下評論。地獄,如果你這樣做,你可以回答這個問題。 – 2015-07-20 13:28:59

+0

ok聽起來不錯,我會給它一個鏡頭... – madamission 2015-07-20 17:43:59

回答

0

我終於回到了有這個問題的項目,它效果很好。

在你的例子中,你提到你將返回類型改爲CreateSeatingTypeRender ...我只是想澄清一下,對於我的測試,以一致性的名義,有五個地方應該作出改變。

那些有四個位於代碼:類名,.designer文件的部分類名,資源管理器的typeof和你提到的IMigrationMetadata.Id財產...

最後的地方是在數據,你還提到,請將MigrationId從舊名稱更新爲新名稱。

進行這些更改的upgrade-database命令可以很好地工作。

對於任何嘗試此操作的人,請記住,如果您要在dev數據庫上重命名遷移程序......如果該遷移程序已存在於生產計算機上,則必須手動重命名__migration表格行以及此遷移已在您部署到該機器時已完成的任何其他位置。

測試註釋: •我的EF測試6.1.3 •這不是MVC5具體