Grazie al settaggio <add key="hibernate.show_sql" value="true" />
Siamo in grado di dire a NHibernate di scrivere a console tutto il SQL generato, ma dovete sapere che NHibernate invia queste informazioni non solo alla console, ma anche a log4net con il logger NHibernate.SQL. Ecco quindi che con questa semplice configurazione si può fare il dump di tutto il sql generato su di un file di testo.
<configSections>
...
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
...
Supponiamo di avere le classi Customers e Orders del database northwind, abbiamo implementato la relazione many-to-one bidirezionale nel nostro domain model, così da avere una collection orders nella classe Customer, ed una proprietà Customer nell'oggetto order. Ora se si vuole prendere tutti gli ordini di "ALFKI" in un determinato range di tempo si può scrivere questa criteria query
ICriteria criteria = session.CreateCriteria(typeof (Order));
criteria.Add(Expression.Between("OrderDate", new DateTime(1997, 10, 1), new DateTime(1998, 1, 1)));
Customer cust = session.Load<Customer>("ALFKI");
criteria.Add(Expression.Eq("Customer", cust));
IList<Order> result = criteria.List<Order>();
Notare come il riferimento all'oggetto Customer sia recuperato tramite il Session.Load() cosi da creare un proxy e non andare a disturbare il database. Ma cosa succede se la relazione non è implementata in maniera bidirezionale, ma unidirezionale? Ad esempio se l'oggetto...