2012-01-26 110 views
0

我有一個簡單的實體數據模型,其中有兩個實體和它們之間的1- *關係。爲了簡化目的,我們假設Person和Book。 (即人們有0本或更多的書籍和書籍必須有一個所有者)設計更新後的數據遷移

系統工作正常,它有數據。

現在我需要創建一個從人(即學生,教師)繼承其他實體

當我創建它們並相應地更新我的軟件,一切工作正常使用這種新模式。

現在我需要遷移舊數據(與圖書鏈接的人員中的數據) 在我的數據中,我知道哪個人是學生,哪些人是老師,並且我還有關於學生和教師的其他信息放置在新模型中。

問題是如何遷移數據。在刪除Person實例之前,我無法添加學生和教師,因爲這會在個人中創建重複的ID。我無法刪除該人員,因爲它創建了一個錯誤。 (「DELETE語句與參考約束衝突」)

如何實現此數據遷移。

感謝

回答

0

如果你真的已映射繼承,你不應該刪除Person - 的Person或者是StudentTeacher所以你應該只需要添加正確的列(在TPH的情況下)或相關表格(在TPT的情況下)並在不修改的情況下使用現有數據。

此遷移必須在SQL中完成。

+0

我使用每種類型的表。我試圖在.NET中做到這一點。這就是爲什麼我試圖刪除實體,然後將其創建爲子類型。有關哪個人是學生,哪個是教師的信息在DB中不存在。這就是爲什麼我試着用.NET來做這件事。 – cellik

+0

因爲你真的不能將'Person'改爲子類型,所以你將無法在.NET中使用新的EF模型。它要求刪除該人及其所有關係,並創建一個具有相同關係的新實體。這是很多不需要的數據庫操作。如果是一次遷移,只需創建一些幫助工具(控制檯應用程序),它將獲取數據並執行SQL以將數據庫置於新的預期狀態。 –

+0

這是一次性的事情。我最終使用c#中的ExecuteNonQuery命令來完成它。基本上我已將行添加到學生和老師表中,並提供必要的數據。 – cellik