0

みなさん、こんにちは。問題があります。簡単に説明します。このアプリケーションでは、NhibernateをORMとして使用し、Fluent Nhibernateをマッピングに使用し、エンティティのソフト削除を実装しました。これは、エンティティがデータベースに対して物理的に削除されないことを意味します。プロパティDeletedByおよびDeletedDateに値を設定します。そして問題は、遅延ロードでロードされたエンティティがソフト削除されたエンティティもロードされることです。エンティティがロードされた後、このエンティティが呼び出されるコードの各場所でDeletedDateがnullである場所をフィルタリングする必要がありますが、これは適切ではありません。

一般に、すべてのエンティティについて、遅延読み込みのソフト削除に関するこの問題をどのように解決できますか?

手伝って頂けますか?

前もって感謝します!

4

2 に答える 2

3

流暢なNhibernateマップでは、子コレクションマップのクラスマッピングで次のように問題が解決されます。次のステートメントを追加する必要があります。

.Where("DeletedDate is null")

 HasMany(x => x.Registrations).Where("DeletedDate is null").KeyColumn("qualificationEnrolmentId").Inverse().Cascade.AllDeleteOrphan();

メソッドがLINQ式でオーバーライドされていますが、この場合は機能しません

Where(x=>x.DeletedDate == null)

ラムダ式のxは、HQLではなくパラメーターSQLクエリで受け入れるメソッドの親エンティティおよびその他のオーバーライドとして認識されるため、このコードは機能しません。

于 2011-08-01T13:27:53.477 に答える
2

私はFluent-Hibernateを使用したことがないので、それがあなたに役立つかどうかはわかりませんが、古典的なNHibernateには次のようになります。

HBMクラスマッピングファイルで、where句を次の場所に配置します。

<class  name="Class_Type" table="Entity_Table" where="DeletedBy is null" >
...
</class>

すべてのリクエストに対して論理的に削除されていないエンティティのみを返す

于 2011-08-01T12:26:30.530 に答える