Frage

Ich mag mein Objektmodell NHibernate zuordnen. Es gibt einen schwierigen Teil in meinem Konzept und ich weiß nicht, ob es möglich ist, diese in NHibernate zu tun.

Ich möchte eine Sammlung von Bäumen haben. Ich habe zwei Klassen (unten, nur wichtige Eigenschaften angegeben). Die Komponente ist ein Knoten eines Baumes und ComponentGroup ist eine Sammlung von Bäumen.

public class Component
{
    public Component Parent { get; set; }
    public IList<Component> SubComponents { get; set; }
    public ComponentGroup Group { get; set; }
}

public class ComponentGroup
{
    public IList<Component> Components { get; set; }
}

Jetzt möchte ich jede Komponente wissen, welche ComponentGroup es gehört, so muss ich Bezug von jeder Komponente zu ComponentGroup (Group-Eigenschaft). Aber ComponentGroup sollte nur Sammlung von Wurzelknoten haben (direkte Kinder) - Komponenten Sammlung. Das ist also so etwas wie eine Eins-zu-Halb Mapping;) „eine Seite“ hat bezieht sich nur auf einige Elemente von „n“ -Seite

.

Haben Sie irgendwelche Ideen haben, wie man so etwas wie dieses mit NHibernate zuzuordnen?

War es hilfreich?

Lösung

Ich werde es versuchen (erzeugt mit FluentNHibernate)

<class name="Component" table="`Component`" xmlns="urn:nhibernate-mapping-2.2">
<id name="ComponentId" type="Int32" column="ComponentId">
  <generator class="identity" />
</id>
<many-to-one name="Parent" column="ParentId" />
<bag name="SubComponents">
  <key column="ComponentId" />
  <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="Group" column="GroupId" />

<class name="ComponentGroup" table="`ComponentGroup`" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" type="Int32" column="ComponentGroupId">
  <generator class="identity" />
</id>
<bag name="Components">
  <key column="ComponentGroupId" />
  <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>

EDIT:

Wenn Sie alle Ihre Komponenten ihre ComponentGroup wissen, dann setzen auf allen von ihnen die ComponentGroup.

Und in ComponentGroup, wenn Sie wollen, dass alle Root-Komponenten nur dann die Tasche ändern:

<bag name="Components" where="ParentId is null"> 

, so dass Sie nur die Root-Komponenten erhalten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top