これは、次のように行われます:あなたはこれを指定し、あなたのマッピングで
public class Customer : Contact
{
private ISet<Order> _orders = new HashedSet<Order>();
public Collection<Order> Orders
{
return new List<Order>(_orders);
}
// NOrmally I would return a ReadOnlyCollection<T> instead of a Collection<T>
// since I want to avoid that users add Orders directly to the collection.
// If your relationship is bi-directional, then you have to set the other
// end of the association as well, in order to hide this for the programmer
// I always create add & remove methods (see below)
public void AddOrder(Order o)
{
if(o != null && _orders.Contains(o) == false)
{
o.Customer = this;
_orders.Add(o);
}
}
}
:
は、このようなあなたのクラスを作成します。 :
<set name="Orders" table="OrdersTable" access="field.camelcase-underscore" inverse="true">
<key column="..." />
<one-to-many class="Order" .. />
</set>
継承を使用しているため、異なるポジションNHibernateので継承マッピングに関する居住し、自分の状況に最も適した戦略を選択します。設定&バッグセマンティクスについて inheritance mapping
を: - あなたはセットとして、コレクションをマッピングするとき、あなたはすべてのことを確認することができますマップされたコレクション内のエンティティは一意です。つまり、NHibernateは、インスタンスを再構成している間、コレクションに重複が含まれないようにします。 - コレクションをバッグとしてマップすると、DBからオブジェクトをロードするときにコレクションに同じエンティティが複数回含まれる可能性があります。
- セットは、全体として考えられる個別の オブジェクトの集合です。 A (文字の) の有効な例は{a、b、c、d}です。各文字 は正確に1回発生します。
- バッグは、セットの一般化です。 バッグのメンバーは、 の1つのメンバーシップを持つことができ、一方、 セットの各メンバーは、1つのメンバーシップしか持たない。有効な バッグの例は、{a、a、b、c、 c、d、...}です。文字aとc はバッグに複数回出現します。
はあなたのコレクションには、注文されていますか?つまり、保存してデータベースから戻った後、同じ順序で要素を期待していますか? –
コレクションはアイテムを追加した方法で保存する必要があります。 orderA、orderB、orderCを追加してもう一度読むと、orderA、orderB、orderCの順番で保持されなければなりません。 –