2010-03-22 2 views
1

J'essaie de récupérer les lignes de détail individuelles sans avoir à créer un objet pour le parent. J'ai une carte qui se joint à une table parente avec le détail pour y parvenir:Dupliquer des éléments à l'aide de Join dans NHibernate Map

Table("UdfTemplate"); 
Id(x => x.Id, "Template_Id"); 
Map(x => x.FieldCode, "Field_Code"); 
Map(x => x.ClientId, "Client_Id"); 

Join("UdfFields", join => 
{ 
    join.KeyColumn("Template_Id"); 

    join.Map(x => x.Name, "COLUMN_NAME"); 
    join.Map(x => x.Label, "DISPLAY_NAME"); 
    join.Map(x => x.IsRequired, "MANDATORY_FLAG") 
     .CustomType<YesNoType>(); 
    join.Map(x => x.MaxLength, "DATA_LENGTH"); 
    join.Map(x => x.Scale, "DATA_SCALE"); 
    join.Map(x => x.Precision, "DATA_PRECISION"); 

    join.Map(x => x.MinValue, "MIN_VALUE"); 
    join.Map(x => x.MaxValue, "MAX_VALUE"); 
}); 

Quand je lance la requête en NH en utilisant:

Session.CreateCriteria(typeof(UserDefinedField)) 
    .Add(Restrictions.Eq("FieldCode", code)).List<UserDefinedField>(); 

je reviens trois fois la première ligne par opposition à les trois rangées individuelles, il devrait revenir. En regardant la trace SQL dans NH Profiler, la requête semble être correcte. Le problème semble être dans le mappage mais je ne sais pas comment résoudre ce problème. Je suis sur le point d'activer la journalisation pour voir ce que je peux trouver, mais je pensais que je posterais ici au cas où quelqu'un avec l'expérience de cartographie sait où je vais mal.

+0

j'ai changé la direction de la jointure de sorte que le mappage fonctionne modèle > Champs. Ce n'est pas idéal car je dois créer des objets/cartes supplémentaires, mais il en résulte une requête similaire en cours d'exécution et le résultat final que je recherche. Toujours ouvert aux idées si quelqu'un les a sur la façon de rejoindre l'enfant> parent. –

+0

Avez-vous essayé d'utiliser un transformateur DistinctRootEntity? Serait quelque chose comme .SetResultTransformer (CriteriaUtil.DistinctRootEntity) – ddango

+0

Je l'ai fait - il ne retournerait qu'une seule ligne plutôt que les trois lignes distinctes. –

Répondre

Questions connexes