MISE À JOUR: Ceci est totalement fausse hypothèse. Je l'ai retesté et bien sûr je me suis trompé. NHibernate génère du code SQL qui va ramener toutes les lignes enfants aux deux listes enfants. Merci sirrocco pour le commentaire. Je pense que la meilleure question est de savoir comment nous pourrions faire quelque chose comme ce travail.Comment NHibernate sait-elle quelles sont les propriétés de classe à mettre en valeur?
J'ai modifié le code un peu des exemples de NHibernate Fluent dans Wiki.
Modèle
public class Parent
{
public IList<Child> Children1 { get; set; }
public IList<Child> Children2 { get; set; }
}
public class Child
{}
Schéma
table Parent (
ID int primary key
)
table Child (
ID int primary key,
ParentID int
)
Mapping Courant
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
HasMany<Child>(x => x.Children1);
HasMany<Child>(x => x.Children2);
}
}
Comme vous pouvez le voir, althou gh la classe Parent
a deux listes Child
(c'est-à-dire, Children1
et Children2
), quand elles sont mappées aux tables de base de données, il n'y a rien dans la table indiquant quelles lignes enfants devraient être dans les listes Children1
ou Children2
. Du point de vue de la base de données, nous savons seulement quelle ligne enfant appartient à quel parent mais pas quelles listes enfants. Cependant, cela semble fonctionner correctement dans NHibernate. Y a-t-il quelque chose qui se passe derrière la scène?
Il y a un bon exemple et une solution publiée dans stackoverflow si quelqu'un est intéressé. http://stackoverflow.com/questions/1773239/how-can-i-use-fluent-nhibernate-automapping-with-multiple-lists-of-the-same-type – kimsk