2015-12-15 48 views
0

換款時,我有這樣的事情:實體框架6遷移,從簡單類型複雜類型(表)

class Person 
    string CarModel 

其在數據庫方面被記到MyClass的表「myProperty的」字符串列。

現在我有:

class Person 
    string CarId 

class Car 
    int Id 
    string Model 

其中EF轉化爲兩個表:MyClass的和MyNewClass,並有Car.CarId - >指向Car.Id.到現在爲止還挺好。

我將手動照顧使用Person.CarModel列中的項目填充Car表。但問題是:我如何遷移我的數據?我想讓Person.CarId指向正確的Car.Id記錄。我想是這樣的:

UPDATE [dbo].[Person] 
SET [CarId] = cars.Id 
    FROM [dbo].[Cars] cars 
WHERE cars.Model = [dbo].[Cars].CarModel 

我做新列(CarId),從表中的舊列(CarModel)的下降的加入之間。但是,SQL服務器抱怨'CarId列不存在'。我想這與變化是交易有關。

什麼是正確的方法呢?我使用的腳本(即我刪除我的文件夾遷移後,我產生的.sql出來的)

回答

0

我認爲最好的辦法是:

  1. 從模型中取出舊CarModel串並添加新將車輛實體添加到您的人員,但在此後面的遷移中,而不是刪除CarModel列,將其重命名爲[_Stale_CarModel](命名僅爲例)。

  2. 在數據庫上運行手動數據遷移腳本,驗證數據是否正確遷移 - 爲具有[_Stale_CarModel]集合且值正確的行設置了ids。您可以手動添加帶有數據遷移代碼的EF遷移,或者在您提交實際遷移數據之前需要爲您的數據執行驗證腳本,或者如果您的遷移需要超過默認超時,則可以自行完成。

  3. 創建清理你的DB模式遷移(EF將爲這一步空遷移)和手動編寫DropColumn("Person", "[_Stale_CarModel]")

+0

謝謝,我根據我對你的文章的解決方案。我創建了總共3個腳本 - 初始遷移添加了新的表/列,一個遷移sql腳本,它基於舊的填充新列,然後是另一個刪除舊列的遷移sql腳本。 –