2009-09-10 13 views
2

Salut à tous. Question rapide sur la syntaxe Fluent. Je pensais que j'avais ça en panne, mais je reçois un échec étrange. Fondamentalement, j'ai un type de structure hiérarchique que j'essaie de persister, et tout semble fonctionner, sauf quand je fais un test d'intégration réel avec le db.Données hiérarchiques NHibernate courantes

J'ai un objet Node qui a une propriété Parent, qui est un autre nœud, et un champ _children sauvegardant une propriété Children readonly, qui est également une collection de nœuds.

Les propriétés gèrent les corrélations et les objets en mémoire testent correctement. Lorsque je les récupère du dépôt (un db SQLite en mémoire dans mes tests), cependant, les Node's Children se comprennent pour une raison quelconque. Des idées?

Mes applications sont la plupart du temps fait w/AutoMap, mais j'ai surchargé les éléments suivants:

mapping.References(x => x.Parent); 
mapping.HasMany(x => x.Children).Inverse().Access.LowerCaseField(Prefix.Underscore); 

J'ai aussi essayé il w/o l'appel inverse().

+0

hm. a converti la classe Node pour utiliser une propriété publique w/get/set au lieu du champ privé et la collection a été récupérée correctement. Je préférerais vraiment ne pas le faire de cette façon, cependant. – Paul

+0

plus d'infos; Je vérifie la base de données et tout sauve correctement, le problème est quand les données sont retirées dans des objets. – Paul

Répondre

3

Vous l'avez. Le problème était que j'avais besoin de dire à la collection des enfants quel champ d'identification pour se connecter à la clé étrangère.

je changé que le mappage pour ressembler à ceci:

mapping.HasMany(m => m.Children) 
    .Inverse() 
    .KeyColumn("ParentId") 
    .Access.CamelCaseField(Prefix.Underscore) 
    .Cascade.All() 
+0

Je l'avais déjà fait avec Castle Framework mais je l'avais oublié et je me battais avec le même problème que vous. Quand j'ai lu votre réponse, j'ai eu un moment "A-ha", merci :) –