2009-08-13 6 views
0

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?

+0

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

Répondre

1

Etes-vous sûr que cela fonctionne correctement? Je viens de tester cela et ajouté un enfant à chaque collection et comme prévu chaque collection avait les mêmes 2 enfants.

+0

Oui, vous avez raison. Ça ne marche pas vraiment. Je pense que je me suis trompé parce que je l'ai testé dans une session NHibernate et que NHibernate n'a pas créé d'objet à partir de la base de données. – kimsk

Questions connexes