2

私はPgsqlデータベースにアクセスするNHibernateでASP.Netを使用しています。

一部のオブジェクトでは、NHibernate バッグを使用します。これは、アプリケーション内の List オブジェクトにマップされます。データベース内のリストに関係する何かを更新するときに、NHibernate を介してオブジェクトを更新する必要があるという問題が発生することがあります。

<bag name="Objects" inverse="true" lazy="true" generic="true" >
   <key column="object_id" />
   <one-to-many class="Object" />
</bag>

上記は、バッグに使用するコードのサンプルです。

他の誰かがこの問題に遭遇したかどうか疑問に思っていましたが、それを回避するために何をしていますか?

4

1 に答える 1

4

save-update などの NHibernate カスケードを試しましたか?

エンティティの関連付けを自動的にトラバースし、カスケード オプションに従って動作するように NHibernate に指示することができます。たとえば、保存更新カスケードを使用して保存されていないエンティティをコレクションに追加すると、親オブジェクトとともに保存されます。明示的な指示は必要ありません。

各カスケード オプションの意味は次のとおりです。

  • none - カスケードを行わず、ユーザーに処理させます
  • save-update - オブジェクトが保存/更新されたときに、関連付けを確認し、それを必要とするすべてのオブジェクトを保存/更新します (多対多シナリオでの関連付けの保存/更新を含む)。
  • 削除- オブジェクトが削除されると、関連付け内のすべてのオブジェクトが削除されます。
  • delete-orphans - オブジェクトが削除されると、関連付け内のすべてのオブジェクトが削除されます。それに加えて、オブジェクトが関連付けから削除され、別のオブジェクトに関連付けられていない (孤立している) 場合は、そのオブジェクトも削除します。
  • all - オブジェクトが保存/更新/削除されたときに、関連付けを確認し、見つかったすべてのオブジェクトを保存/更新/削除します。
  • all-delete-orphans - オブジェクトが保存/更新/削除されたときに、関連付けをチェックし、見つかったすべてのオブジェクトを保存/更新/削除します。それに加えて、オブジェクトが関連付けから削除され、別のオブジェクトに関連付けられていない (孤立している) 場合は、そのオブジェクトも削除します。

詳細はこちら: NHibernate Cascades: all, all-delete-orphans と save-update の違い

于 2008-09-23T12:27:47.893 に答える