Jag är rädd att hans inte kommer att fungera. Genom design och arten av
Hur man (jag gör) lösa det här problemet är lite annorlunda. Jag har ett objekt Language
, Alternativet har en samling språk
public virtual IList<Language> Languages {get; set;}
Mappningen är till exempel
<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>
Tricket ligger i filtret . Det här är en dynamisk version av var mappningsattribut (18.1. NHibernate-filter)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Sedan kan vi slå på filtret för alla operationer i den aktuella sessionen. Endast en gång per begäran (om webbapp), i någon AOP, där vi känner till språk-id:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
Och slutligen vet vi att samlingen Languages bara innehåller en post och vi kan alltid komma åt .First()
. Inga fler resultat med fler språk
Se även:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310