2011-08-10 13 views
2

假設我有一個從我的數據庫中生成的實體數據模型。我在許多地方的代碼中使用了其中一列,但有一天我決定不再需要它,所以我將它從數據庫中刪除,並且代碼中從實體數據模型引用此屬性的地方現在已被破壞。唯一的解決方案是去每個地方修復它,或者是否有任何策略或工具可以幫助這樣的場景?從許多地方使用的數據庫中刪除列時維護實體數據模型?

+0

你的意思是可以例如你的程序的工具,找出代碼的意圖是*並修復它*? – R0MANARMY

+0

這是當你「字符串類型」而不是「強類型」時發生的情況 – Eranga

+0

@Eranga:鑑於這是實體框架,它可能是強類型的,問題是引用該屬性的所有代碼現在看起來像'someObject。[property不再存在]'而且它不能編譯。 – R0MANARMY

回答

1

此問題僅適用於尚未發佈的應用程序。如果應用程序已經發布並且該列已經存在,它將不會被刪除或刪除。現有客戶可能依賴於該列的數據,它可能與應用程序邏輯等有關。出於兼容性原因,它不會被刪除。

如果這是預生產應用程序(pre 1.0版本),任何ORM解決方案應該能夠在刪除數據庫中的物理列之後重新創建邏輯和概念模型。此時,可能會在應用程序的其他層(UI,商業等)中以某種方式引用概念模型中的某些清理。例如,用戶界面可能需要更新以刪除該數據的顯示。這需要一些人工努力。

一般來說,除非應用程序處於開發的早期階段,否則最好保留它。

1

因此,您沒有在列中指定數據並需要將其刪除,因此我們必須進行一般性討論。

如果你可以從數據庫中刪除列,但在代碼中的許多地方使用它,那麼可能是它的計算列 - 一般來說,這意味着你可以從其他數據點派生出相同的信息。因此,在您的實體模型中,您應該停止將列映射到數據庫,而是複製代碼中的邏輯以計算屬性的完整意義值。或者,您可以在表格上創建視圖並在數據庫端計算列,並將實體映射到視圖而不是表格。

如果不計算列,那麼從數據庫中刪除列意味着數據丟失。如果這是可以接受的,那麼它實質上表明瞭該數據點變得無關緊要的基礎業務模型的變化。你有兩個選擇 -

  1. 爲它去改變你的代碼不使用這個屬性 - 它本質上意味着你會調整你的代碼的商業模式/流程的改變,你必須最終在一段時間做。
  2. 將列保留在數據庫中一段時間​​,但具有含義完全默認值。將實體模型屬性標記爲過時,以便它將開始發出警告。花些時間對代碼進行更改,最終目標是一段時間後刪除屬性使用情況,然後刪除數據庫列。