2011-07-17 9 views
0

Ok、 私のソリューションでは、エンティティを削除する代わりに、IsDeletedをtrueに設定してソフト削除を実装しました。nhibernate softdelete where override

また、マップのクラスでWhere IsDeleted = falseを追加しました。

これで、すべての選択クエリは、結果が削除されないクエリに限定される場所で実行されます。

しかし、今私は削除されたツールを示す必要がある特定のクエリで。 一部のクエリでこの動作をどのように無効にすることができますか?

助けてください。 ありがとう ルカ

+0

マッピングの関連部分を投稿することはできますか? –

答えて

1

代わりにフィルタを使用して機能を実装するようアドバイスします。

IsDeleted列を持つすべてのエンティティでこのフィルタを有効にし、すべてのレコードを検索するときに明示的にフィルタを無効にすることができます。

それはここで説明されているものと非常によく似ています:シナリオのまさにそのようなのための偉大なNHibernate: Creating a criteria which applies for all queries on a table

1

1フィルタの仕事が、それらは多対一、一対一の関連付けに動作しない心に留めておきます。

のでBarBarに削除ソフトとFooポイントで、関連は(すなわち。Foo.Bar)マップされたクラスFooBarの場合のために、あなたはfooとbarをフェッチする場合には、企業は、まだ水和されるソフト削除されます。あなたは

if (Foo.Bar != null) { 
    //will never execute 
} 

のようなロジックが含まれている場合

これは、あなたがライブラリに些細な変更を加えることで、この動作を変更することができます問題がある、私はそれを行う方法を示して http://savale.blogspot.com/2010/01/enabling-filters-on-mapped-entities.htmlの記事を書かれています。 v2.1.2のoprationについて説明していますが、v3.0 + pfと同様です。NHibernate