Mysql
 sql >> Base de données >  >> RDS >> Mysql

NHibernate QueryOver - collection avec trop de résultats

J'ai peur que ça ne marche pas. De par la conception et la nature du <join> . Comme indiqué dans la documentation :

La façon dont (je fais) résoudre ce problème est un peu différent. J'ai un objet Language , l'Option a collection de langues

public virtual IList<Language> Languages {get; set;}

Le mapping est par exemple <bag>

<bag name="Languages"  batch-size="25"
  cascade="all-delete-orphan" inverse="true" >
  <key column="option_id" />
  <one-to-many class="Language" />

  <filter name="LanguagFilter" condition=":languageId = LanguageId" />
</bag>

L'astuce est dans le filtre . Il s'agit d'une version dynamique de mapping-attribute (18.1. Filtres NHibernate)

<filter-def name="LanguageFilter" >
  <filter-param name="languageId" type="Int32" />
</filter-def>

Ensuite, nous pouvons activer le filtre, pour toutes les opérations de la session en cours. Une seule fois par requête (si application Web), dans certains AOP, dont nous connaissons l'identifiant de langue :

var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);

Et enfin, nous savons que la collection Languages ​​ne contient qu'un seul enregistrement et nous pouvons toujours accéder à .First() . Plus de résultats multiples avec plus de langues

Voir aussi :https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310