流ListなnhibernateをBag Listとしてマッピングする違いは何ですか?
-
05-07-2019 - |
質問
親が管理する必要があるエンティティのリストにマッピングするベストプラクティス
解決
差異はセマンティックです:
- set は、コレクションが順序付けられておらず、各アイテムを1回だけ含めることができる場合に使用する必要があります
- バッグはまだ順序付けられていませんが、いくつかのアイテムを何回も含めることができます(少なくとも-多対多のマッピングでは)
- リストは順序付けられたコレクションであり、いくつかのアイテムを何度も含むことができます-アイテムが保存されたのと同じ順序で取得されることが保証されます(NHibernateは指定されたインデックスを管理しますあなたのための列)
ただし、バッグとリストの両方をIList <!> lt; <!> gt;で表すことができます。コードでは-それは完全に大丈夫ですが、バッグ内のアイテムの順序に依存できないことを覚えておく必要があります。
リストのマッピング方法を選択するときは、コレクションに最適なオプションを選択します-注文が不要な場合はバッグを選択し、注文が必要な場合は list を選択します。
補足:バッグ内のアイテムの順序を制御する可能性があります-適切なSQL式でorder-by属性を指定する必要があります。ただし、これを使用して list の動作をエミュレートしないでください- list を直接使用してください。 bag のOrder-by属性は、最後の変更のタイムスタンプによるエンティティの順序など、他の属性の結果である場合に使用することを意図しています。
他のヒント
私が見つけたすべての例では、 IList <!> lt; <!> gt; を使用しています。これが私のコードで使用しているものです。
Bagは元のJava Hibernateの残り物だと思う-その効果についての投稿を読んだのを漠然と覚えている。
所属していません StackOverflow