16

如果您重命名屬性,則Visual Studio IDE足夠智能,可以幫助您重構在整個代碼中重命名該屬性。如果重命名是在EF遷移使用的模型,你運行像一個標準的自動遷移:EF遷移:自動遷移中的RenameColumn?

update-database -f 

你會得到這樣的:

AddColumn("NewName"... 
DropColumn("OldName"... 

你想要的不是什麼。很顯然,在這一點上運行Add-Migration可以讓你進入並手動將這兩個調用改爲一次調用RenameColumn,但是有什麼方法可以讓自動遷移自動執行?有些財產重命名的方法,我可能不正確,可能?

我在VS2012中使用EF 5.0,但是此行爲也出現在EF 4.3.1和VS2010中。

回答

23

遷移無法自動檢測到屬性和列的重命名。腳手架移植將包含一個Drop/Create,您需要將其更改爲Rename。

如果您只是重命名該列(通過向該屬性添加[Column]註釋),我們可以將其檢測爲重命名,因爲我們可以匹配該列所映射到的屬性的名稱。

我們考慮在Add-Migration命令中添加一個-Renames開關,但最終我們決定編輯生成的代碼比在命令行中提供重命名的語法更容易。

〜羅文

+1

剛剛在最新的EF(截至2014年12月8日)做了這個 - 它檢測到重命名。不知道這個機制 - 羅文,你能提供建議嗎? (代碼第一,沒有註釋,沒有流利 - 只是重命名了某些類的屬性) –

5

我的意見:EF不知道你已經重命名現有的列。重構是設計時間變化,沒有任何關於變化的持久信息,所以當你運行遷移時,EF不知道如何區分重命名和真正刪除/添加新列。

+0

這將是非常有用的,雖然堅持從IDE此信息來遷移,因爲遷移已經利用在許多其他方面的IDE。 –