2010-03-31 7 views
1

Je suis assez nouveau pour nhibernate et fluent nhibernate, j'ai un problème avec l'association d'une collection à une requête. Dans la base de données, j'ai un puits et j'ai 4 AFE associés. Le problème que j'ai est que la collection d'AFE ne se peuple pas correctement. Peu importe ce que je fais, j'ai 4 AFE dans la collection mais ils sont tous le même objet. Y at-il quelque chose d'évident que je me trompe?Fluent Nhibernate Mapping Problème

Merci

PS. Je n'ai pas de changement d'accès à la base de données que je frappe, donc je ne peux pas changer la base de données pour en faire un vrai FK.

Parent

public WellHeaderMap() 
    { 
     Table("Well"); 
     Id(x => x.PropertyNumber, "WELL_NUMBER"); 
     Map(x => x.PropertyID, "PROPERTY_ID"); 
     Map(x => x.Name, "WELL_NAME"); 

     //AFEs is a IList<AFE> 
     HasMany(x => x.AFEs).Inverse().KeyColumn("Property_ID").PropertyRef("PropertyID").Fetch.Join(); 
    } 

Collection

public AFEMap() 
    { 
     Table("AFE"); 
     Id(x => x.PropertyID, "PROPERTY_ID"); 
     Map(x => x.AFETypeID, "AFE_TYPE_CODE"); 
     Map(x => x.AFENumber, "AFE_NUMBER"); 
     Map(x => x.IsDeleted, "DELETED_IND"); 
    } 

Recherche

 var wellSearchCriteria = _session.CreateCriteria<WellHeader>() 
      .CreateAlias("AFEs", "afe") 
      .Add(Restrictions.Eq("PropertyNumber", id.ToString())) 
      //.Add(Expression.Eq("afe.AFETypeID", "01")) 
      //.Add(Expression.Eq("afe.IsDeleted", "N")); 
+0

Est-ce que wellHeader.AFE renvoie les mêmes 4 entités? – mxmissile

+0

Difficile d'en être sûr sans voir la structure de votre table, la structure des classes et les cartographies. Êtes-vous sûr de vouloir que le 'HasMany' soit inversé pour un' many-to-one'? Je ne vois pas de propriété renvoyant au parent pour soutenir cette relation. –

+0

Oui, wellHeader.AFES renvoie toujours la même chose 4. Même si j'ajoute un commentaire à l'afe dans la requête, je devrais seulement retourner 1 AFE, mais il renvoie encore 4. Je pense que j'ai jeté l'inverse là juste à cause d'un échantillon a trouvé. Même résultat si je laisse l'inverse éteint. – SnyderJK

Répondre

0

Je pense que vous pourriez avoir votre WellHeader Id mal, vous avez actuellement:

Id(x => x.PropertyNumber, "WELL_NUMBER"); 
Map(x => x.PropertyID, "PROPERTY_ID"); 

devrait probablement être:

Id(x => x.PropertyID, "PROPERTY_ID"); 
Map(x => x.PropertyNumber, "WELL_NUMBER"); 

Le PropertyNumber et PropertyId sont passés. Cependant, sans voir votre schéma, c'est difficile à dire.

+0

techniquement, ce n'est pas une clé primaire sur la table elle-même, je mettais arbitrairement l'identifiant pour aider à mapper certaines de mes propres tables. – SnyderJK

+0

Si PropertyID n'est pas un PK, est-il possible que vous ayez plusieurs Wells dans le même PROPERTY_ID? – mxmissile

+0

Il existe une contrainte unique sur PROPERTY_ID, et j'ai fait une requête juste pour m'assurer qu'il n'y a pas d'ID de propriété répété. – SnyderJK