我需要使用遷移將代碼第一個實體框架屬性從一個實體移動到另一個實體。這與Move property to new Entity in Entity Framework Code First Migration類似,但有一個額外的摺痕:我需要在我的應用程序中發佈遷移,以便具有現有數據的客戶可以自動遷移。在實體框架代碼第一次遷移中刪除移動的屬性
在這個問題接受的答案說,打破過程分爲三個遷移:
- 添加新的屬性
- 從舊屬性的數據移動到新的物業
- 刪除舊的財產
用於在所述第二移動數據移動的代碼是:
using (var context = new AppContext())
{
var events = context.Set<Event>().ToArray();
foreach (var ev in events)
{
ev.Location = new Location { City = ev.City };
}
context.SaveChanges();
}
問題是,當我刪除舊屬性以生成第三次遷移時,第二次遷移的代碼將不再編譯,因爲屬性ev.City
不再存在。
在第二次遷移中仍然移動數據的同時,在第三次遷移中從代碼模型和數據庫中刪除屬性的正確方法是什麼?有沒有辦法編寫第二個遷移代碼來移動數據而不參考ev.City
?是否有實體框架方法可以讓我檢索ev.City
的值,而不需要具有該名稱的屬性,還是需要一直拖放到原始SQL命令?
我想你可能是對的,我不得不直接使用SQL,但它比簡單的更新更復雜。第二個遷移代碼也插入新的實體,所以至少需要一個INSERT ... SELECT語句。這可能比使用上下文更快,但它也更容易出錯。感謝您指出Sql函數以用於遷移。 –
@StuartMalone好消息是,在原始SQL中測試非常容易。另外我相信你添加的任何東西都會被包裝在一個自動交易中。 – BigJump