Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

NHibernate QueryOver - coleção com muitos resultados


Estou com medo, que o dele não vai funcionar. Por design e pela natureza do <join> . Conforme consta na documentação:

A maneira como (eu faço) resolver este problema é um pouco diferente. Eu tenho um objeto Language , a opção tem coleção de idiomas
public virtual IList<Language> Languages {get; set;}

O mapeamento é, por exemplo, <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>

O truque está no filtro . Esta é uma versão dinâmica do onde atributo de mapeamento (18.1. filtros NHibernate)
<filter-def name="LanguageFilter" >
  <filter-param name="languageId" type="Int32" />
</filter-def>

Então, podemos ativar o filtro, para todas as operações da sessão atual. Apenas uma vez por solicitação (se for web app), dentro de algum AOP, onde sabemos o id do idioma:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);

E finalmente, sabemos que a coleção Languages ​​contém apenas um registro e sempre podemos acessar .First() . Chega de resultados múltiplos com mais idiomas

Veja também:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310