Ricerche con NHibernate

In questi giorni lavorando con NH mentre stavo realizzando un metodo di caricamento tramite ICriteria, il fido intellisense di VS2008 mi ha mostrato la classe Example.
Questa permette di filtrare i dati usando un oggetto "semipopolato" per costruire la clausola where.
Ad esempio, supponete di voler caricare tutti gli ordini in stato "accettato" del 09/04/2007. Usando l'oggetto Example potete scrivere:

Ordine ordine = new Ordine();
ordine.Stato = StatiOrdine.Accettato;
ordine.Data = new DateTime(2007, 04, 09);
ICriteria criteria = session.CreateCriteria(typeof(Ordine));
criteria.Add(Example.Create(ordine));
IList result = criteria.List();

In pratica NH cerca tra le proprietà dell'oggetto ordine quelle che hanno un valore diverso dal default (null, zero, DateTime.MinValue, ecc...) e le usa per costruire il filtro.

L'ho subito utilizzato per implementare una funzionalità di ricerca all'interno di una mia applicazione.

Print | posted on sabato 8 settembre 2007 21.07

Comments on this post

# re: Ricerche con NHibernate

Requesting Gravatar...
Intresting...
Sai se funziona anche con tabelle in join con la tabella ordini ? Es.:

Ordine ordine = new Ordine();
ordine.Cliente.RagioneSociale = "Maccari";ICriteria criteria = session.CreateCriteria(typeof(Ordine));criteria.Add(Example.Create(ordine));IList result = criteria.List();
Left by makka on set 09, 2007 7.02

# re: Ricerche con NHibernate

Requesting Gravatar...
Si è possibile anche se non direttamente come hai fatto tu. Devi creare un altro ICriteria per la classe associata e creare un secondo "Example".
In pratica:

Ordine ordine = new Ordine();
ordine.Cliente.RagioneSociale = "Maccari";

ICriteria criteria = session.CreateCriteria(typeof(Ordine));

criteria
.Add(Example.Create(ordine))
.CreateCriteria("Cliente")
.Add(Example.Create(ordine.Cliente));

IList result = criteria.List();
Left by Emanuele DelBono on set 10, 2007 10.32

Your comment:

 (will show your gravatar)
 
Please add 5 and 7 and type the answer here: