FluentNHibernate e le proprietà da non mappare…
L’inghippo di fondo è questo: quando mappate una entity, in fase di inizializzazione dei proxy (e qui vado a intuito) il proxy builder cerca tutte le proprietà e si lamenta, con una sonora exception, se una delle proprietà non è virtual o se manca del set accessor. Il messaggio di errore poi è quantomeno fuorviante :-)
Girovagando su internet si trovano tante colorite soluzioni (pezze direi io) tra cui la più bella è quella di disabilitare in toto il proxy validator:
Ma a casa mia non è un’opzione piuttosto una porcata.<property name="use_proxy_validator">falseproperty>
Ergo mi sono messo a cercare e salta fuori che FluentNHibernate ha una strana sintassi, che in teoria dovrebbe funzionare, ma che in realtà non produce alcun effetto tangibile:
Quel “Not” dovrebbe impedire il tentativo di mapping… ciccia… alla fine la soluzione è comunque semplice:public SubjectMapping() { this.Not.Map( s => s.RuntimeEvaluatedProperty );
e consiste nel disabilitare il lazy loading a livello di classe (this.Not.LazyLoad()) e riabilitarlo eplicitamente ove serve.public SubjectMapping() { this.WithTable( "Subjects" ); this.Not.LazyLoad(); this.HasMany( s => s.Addresses ) .LazyLoad() .Inverse() .Cascade.AllDeleteOrphan() .KeyColumnNames.Add( "SubjectId" );
.m