sql >> Databáze >  >> RDS >> Mysql

NHibernate QueryOver – kolekce s příliš mnoha výsledky

Obávám se, že ten jeho nebude fungovat. Podle návrhu a povahy <join> . Jak je uvedeno v dokumentaci:

Způsob, jak (dělám) vyřešit tento problém je trochu jiné. Mám objekt Language , Možnost má kolekci jazyků

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

Mapování je například <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>

Trik je ve filtru . Toto je dynamická verze kde mapping-attribute (18.1. NHibernate filtry)

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

Poté můžeme zapnout filtr pro všechny operace aktuální relace. Pouze jednou na požadavek (pokud jde o webovou aplikaci), uvnitř nějakého AOP, kde známe ID jazyka:

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

A konečně víme, že kolekce Languages ​​obsahuje pouze jeden záznam a vždy máme přístup k .First() . Už žádné vícenásobné výsledky s více jazyky

Viz také:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310




  1. Služba Windows v .net nedokáže rozpoznat název služby tns

  2. Základní monitorování PostgreSQL – část 3

  3. Přístup k datům pomocí vztahů Laravel

  4. Docker čeká na spuštění postgresql