我已經繼承了一個使用LLBLGen Pro作爲數據庫層的項目。數據庫模型要求當一個條目被刪除時,一個標誌(DeletedDate被設置爲當前時間)。最後一名程序員忽略了這一要求,並在整個應用程序中使用了定期刪除。LLBLGen:如何軟刪除一個條目
有沒有辦法將代碼生成器設置爲自動執行此操作,或者是否必須爲需要它的實體重載每個刪除操作符?
我已經繼承了一個使用LLBLGen Pro作爲數據庫層的項目。數據庫模型要求當一個條目被刪除時,一個標誌(DeletedDate被設置爲當前時間)。最後一名程序員忽略了這一要求,並在整個應用程序中使用了定期刪除。LLBLGen:如何軟刪除一個條目
有沒有辦法將代碼生成器設置爲自動執行此操作,或者是否必須爲需要它的實體重載每個刪除操作符?
我在SQL Server 2005中使用INSTEAD OF觸發器在刪除軟件刪除表時使用了此功能。觸發器設置刪除標誌並執行清理。這個解決方案的優點在於,它可以正確處理任何訪問數據庫的系統發出的刪除操作。 INSTEAD OF在SQL Server中是比較新的,我知道有一個與Oracle相當的東西。
該解決方案還可以很好地與我們的O/R映射器搭配使用 - 我創建的視圖可以過濾掉軟刪除的記錄並映射它們。這些視圖也用於所有報告。
您可以在LLBLGen中創建自定義任務,以便在生成實體時覆蓋這些自定義任務。在網站上查看他們的模板工作室和模板示例。
這取決於您是否使用自助服務或適配器。如果SS需要修改模板,以便爲您設置標誌而不是刪除實體。
如果是適配器,您可以從DataAccessAdapter繼承並重寫delete方法來爲您設置標誌,而不是刪除實體。
雖然每個查詢都需要過濾出「已刪除」實體,並且因爲「已刪除」列的選擇性不會很高(所有「未刪除」記錄都是空 - 我猜這將是其中的大多數)索引它並沒有給你帶來很多好處 - 你最終會得到很多表掃描。
非常酷的建議 - 它似乎是有用的,無論具體的ORM或其他DAL策略的選擇。 – 2008-11-19 16:45:32