我正在處理數據庫,其中設計者決定用IsHistorical位列標記每個表。沒有考慮適當的建模,並且我無法更改模式。使用EntityFramework軟刪除(IsHistorical列)
當開發與導航屬性相互作用的CRUD屏幕時,這會造成一些摩擦。我不能簡單地拿一個產品,然後編輯它的EntityCollection我不得不手動寫IsHistorical檢查到處都是,它讓我發瘋。
附加也太可怕了,因爲到目前爲止,我已經寫了所有的人工檢查,看是否加法只是軟刪除添加重複的實體,我可以只需撥動IsHistoric所以不是。
的三個選項,我考慮的是:
修改T4模板包括IsHistorical檢查和同步。
截取缺失和在ObjectContext的增加,切換IsHistorical列,然後同步的對象的狀態。
訂閱AssociationChanged事件並在那裏切換IsHistorical列。
有沒有人有這方面的經驗或可以推薦最無痛的方法?
注:是的,我知道,這是不好的造型。我讀過關於軟件刪除的相同文章。它很臭,我必須處理這個要求,但我這樣做。我只想要處理軟刪除的最無痛的方法,而不必爲我的數據庫中的每個導航屬性編寫相同的代碼。
注#2盧克萊德的答案在技術上是正確的,儘管強迫你成爲一個非常糟糕的人類ORM,無圖形模式。問題在於,現在我需要從圖中剔除所有「已刪除」對象,然後在每一個對象上調用Delete方法。那真的不會爲我節省那麼多手工禮儀編碼。現在我正在收集已刪除的對象並循環播放,而不是編寫手動IsHistoric檢查。
我感覺到你的痛苦,並會仔細監視這個線程。希望你得到答案! –
你爲什麼說它真的很差/差?你能解釋更多嗎? – LukLed