Dies wird folgendermaßen durchgeführt:
Erstellen Sie Ihre Klasse wie folgt:
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);
}
}
}
in Ihrem Mapping, geben Sie dies an:
<set name="Orders" table="OrdersTable" access="field.camelcase-underscore" inverse="true">
<key column="..." />
<one-to-many class="Order" .. />
</set>
Da Sie Vererbung verwenden, sollten Sie sich auf jeden Fall die verschiedenen Möglichkeiten des Vererbungsmappings in NHibernate ansehen und die Strategie wählen, die für Ihre Situation am besten geeignet ist: Vererbungsabbildung
Bezüglich der Semantik von Mengen und Beuteln: - Wenn Sie eine Sammlung als Menge abbilden, können Sie sicher sein, dass alle Entitäten in der abgebildeten Sammlung eindeutig sind. Das heißt, NHibernate stellt sicher, dass die Sammlung bei der Wiederherstellung einer Instanz keine Duplikate enthält. - Wenn Sie die Sammlung als Tasche abbilden, ist es möglich, dass Ihre Sammlung die gleiche Entität mehr als einmal enthält, wenn das Objekt aus der DB geladen wird.
- Eine Menge ist eine Sammlung von verschiedenen Objekten, die als Ganzes betrachtet werden. A gültiges Beispiel für eine Menge (von Buchstaben) ist: { a, b, c, d }. Jeder Buchstabe kommt genau einmal vor.
- Ein Beutel ist eine Verallgemeinerung einer Menge. A Mitglied eines Beutels kann mehr als eine Mitgliedschaft haben, während jedes Mitglied einer Menge nur eine Zugehörigkeit hat. Ein gültiges Beispiel für einen Beutel ist { a, a, a, b, c, c, d, ...}. Die Buchstaben a und c kommen mehr als einmal in der Tüte vor.