Seguendo il post di Gian Maria oggi mi sono deciso ad attivare il log su NHibernate per verificare quali query fossero lanciate sul database (a proposito quando attivate il log ricordatevi di inserire l'inizializzazione di log4net altrimenti non viene loggato niente).
Tutto funziona a meraviglia, ma con mio stupore ho notato che nel dump sono presenti una serie di update a fronte di una semplice lettura di dati (da un solo tipo di entità). Controllo il mio file di mapping ma è tutto molto semplice: qualche proprietà e 4-5 relazioni many-to-one. Vado in debug e in effetti verifico che la sessione è dirty.
Non sapendo che altro verificare, ho iniziato a togliere dal file di mapping proprietà su proprietà fino a scoprire quelle colpevoli: si tratta di due campi DateTime che nel database sono però nullabili. La spiegazione dettagliata del perchè l'entità venga considerata dirty la trovate in questo post di Ayende.
Come consigliato ho risolto il problema modificando le due proprietà affinchè fossero nullable:
Public Overridable Property Data() As Nullable(Of DateTime)
Get
Return m_Data
End Get
Set(ByVal value As Nullable(Of DateTime))
m_Data = value
End Set
End Property
Technorati Tags:
NHibernate,
Nullable