Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

NHibernate

Evitate se possibile NHibernate not-found=”ignore”

Se avete un legacy database dove alcuni processi fanno manipolazioni del database al di fuori del vostro controllo potreste trovarvi in una situazione in cui l’entità A referenzia l’entità B con una many-to-one, e quindi la tabella dove viene salvata l’entità A ha una foreign-key verso la tabella B. Supponiamo inoltre che la tabella A sia stata introdotta in un momento successivo, e ci sono processi che cancellano record dalla tabella usata per salvare l’entità B, lasciando quindi i record di A orfani. In questa situazione NHibernate genererà un errore a runtime quando si tenta di accedere alla relazione...

posted @ mercoledì 19 giugno 2013 22:07 | Feedback (0) | Filed Under [ NHibernate ]

NHibernate, criteria query e relazioni

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...

posted @ martedì 4 dicembre 2007 21:22 | Feedback (0) | Filed Under [ NHibernate ]

Provider di connessione per nhibernate - Precisazioni

Nel precedente post ho spiegato come realizzare un provider custom per le connessioni in nhibernate al fine di potere iniettare una connessione in una sessione. Per completezza è il caso di citare che il metodo SessionFactory.OpenSession() ha una versione in overload che accetta un oggetto IDbConnection come parametro. Il risultato è praticamente analogo e sicuramente si scrive meno codice rispetto all'esempio precedente. Il contro di questa tecnica è che spesso si debbono eseguire dei test su classi che internamente creano una sessione (o prendono quella della conversazione corrente). Queste classi chiaramente invocano il metodo SessionFactory.OpenSession() senza preoccuparsi della gestione della...

posted @ venerdì 3 agosto 2007 23:56 | Feedback (0) | Filed Under [ NHibernate ]

Provider di connessioni per nhibernate

Debbo dire che più conosco nhibernate più lo apprezzo veramente tanto. Stasera mi sono chiesto, posso iniettare una mia connessione in una sessione? Lo scopo di una simile operazione è vario, potrei ad esempio iniettare una connessione durante un test per potere poi fare query dirette al database e verificare che i dati siano scritti bene, oppure potrei volere eseguire codice SQL diretto assieme a nhibernate in una unica transazione etc etc. LA soluzione a questo problema è veramente banale :D. Nhibernate definisce un interfaccia chiamata IConnectionProvider tramite la quale la sessionFactory recupera la connessione da dare in pasto alla sessione,...

posted @ venerdì 3 agosto 2007 22:56 | Feedback (1) | Filed Under [ NHibernate ]

Powered by:
Powered By Subtext Powered By ASP.NET