Question

Je souhaite mapper mon modèle d'objet sur NHibernate. Mon concept comporte une partie délicate et je ne sais pas s'il est possible de le faire avec NHibernate.

Je veux avoir une collection d’arbres. J'ai deux classes (ci-dessous, seules les propriétés importantes indiquées). Component est un noeud d'arbre et ComponentGroup est une collection d'arbres.

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; }
}

Maintenant, je veux que chaque composant sache à quel ComponentGroup il appartient. J'ai donc besoin d'une référence de chaque composant à ComponentGroup (propriété Group). Mais ComponentGroup doit avoir uniquement une collection de nœuds racine (enfants directs) - Collection de composants. Il s’agit donc d’un mappage un pour moitié;) "un" côté ne fait référence qu’à certains éléments de "nombreux". côté.

Avez-vous des idées pour cartographier quelque chose comme cela avec NHibernate?

Était-ce utile?

La solution

Je vais essayer (généré avec 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:

Si vous voulez que tous vos composants connaissent leur ComponentGroup, définissez-les tous sur ComponentGroup.

Et dans ComponentGroup, si vous voulez que tous les composants racine seulement, modifiez le sac en:

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

pour que vous n'obteniez que les composants racine

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top