Supponendo di aver bisogno di mappare un’entità che espone delle proprietà calcolate con FluentNHibernate avete qualche problema…
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:
<property name="use_proxy_validator">false</property>
Ma a casa mia non è un’opzione piuttosto una porcata.
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:
public SubjectMapping()
{
this.Not.Map( s => s.RuntimeEvaluatedProperty );
Quel “Not” dovrebbe impedire il tentativo di mapping… ciccia… alla fine la soluzione è comunque semplice:
public SubjectMapping()
{
this.WithTable( "Subjects" );
this.Not.LazyLoad();
this.HasMany( s => s.Addresses )
.LazyLoad()
.Inverse()
.Cascade.AllDeleteOrphan()
.KeyColumnNames.Add( "SubjectId" );
e consiste nel disabilitare il lazy loading a livello di classe (this.Not.LazyLoad()) e riabilitarlo eplicitamente ove serve.
.m