我想在我的應用程序中使用Fluent NHibernate實現簡單的軟刪除。所有實體都有一個布爾標誌IsDeleted
,而刪除操作只會將此屬性設置爲true。 我很努力地查詢更復雜的實體,例如通過多對多的關係來引用對方。比方說,我有Person
實體,具有Project
個集合:用Fluent NHibernate過濾軟刪除數據
class Person : Entity {
public virtual IList<Project> Projects { get; set; }
}
class Project : Entity {
//some properties
}
現在想象Person
p具有Project
小號proj1和proj2。如果proj1被軟刪除,我們只需將它的IsDeleted
屬性設置爲true即可。但是,當我訪問p的項目時,集合會自動延遲加載proj1,與其標誌無關。當然,我總是可以過濾集合,例如Projects.Where(x => !x.Isdeleted)
,但這會導致重複代碼容易出現錯誤。我想從我的表現層中分離出這種數據。
我想通過一些全局規則自動化這個過程,說「只加載設置爲false的實體IsDeleted
」,它適用於所有查詢和延遲加載的集合。
我曾嘗試:
- 覆蓋事件,但我沒能攔截所有數據庫中讀取並篩選所讀取的所有實體。
- 過濾器,我無法使用延遲加載的集合。
你會推薦什麼是最簡單的方式來實現軟刪除沒有代碼重複和容易分離的表示層?
你能告訴我們的項目映射,你可以在類XML層次過濾器直接 – Rippo
另請參見這裏怎麼看。 http://puredotnetcoder.blogspot.co.uk/2012/04/using-filters-for-unmapped-columns-in.html – Rippo