2010-08-11 17 views
0

J'ai l'interface:Mapping pour la classe multi-interface héritée de NHibernate

public interface IHasList<T> 
{ 
    IList<T> Items { get; set; } 
} 

Et je veux mapper cette classe en utilisant une à plusieurs cartographie des listes:

public class Model : IHasList<A>, IHasList<B> 
{ 
    ... 
} 

Can Je fais ça? Si oui, comment écrire une cartographie?

+0

Pourquoi est-ce différent de tout autre mappage pour vous? – Paco

Répondre

0

C'est possible, mais un peu bizarre.

Tout d'abord, afin de déclarer en C#, modèle ressemblerait à ceci:

public class Model : IHasList<A>, IHasList<B> 
{ 
    IList<A> IHasList<A>.Items { get; set; } 
    IList<B> IHasList<B>.Items { get; set; } 
} 

Vous avez donc besoin de faire NHibernate comprendre que:

<bag name="IHasList&lt;A&gt;.Items" table="ModelItemA"> 
    <key /> 
    <one-to-many class="A" /> 
</bag> 
<bag name="IHasList&lt;B&gt;.Items" table="ModelItemB"> 
    <key /> 
    <one-to-many class="A" /> 
</bag> 

(Je suppose A et B sont des entités mappées avec une relation un-à-plusieurs régulière, modifiez-la en plusieurs-à-plusieurs ou élément et ajoutez des attributs cascade/inverse si nécessaire)

C'est assez propre, le désordre est en fait dans troduit par XML s'échappant. Vous devrez également utiliser les noms complets pour les classes.