Domanda

Se io ho 10 chiamate al database sulla mia pagina web, e nessuno di loro richiede alcuna transazioni ecc Sono semplicemente ottenere i dati dal database (legge), dovrei continuare a utilizzare l'unità di classe di lavoro?

E 'perché la creazione di una nuova sessione per ogni chiamata del database è troppo costoso?

È stato utile?

Soluzione

Con NHibernate, la creazione della sessione di fabbrica è molto costoso (quindi ti consigliamo di memorizzare nella cache la fabbrica di sessione una volta che è creato, probabilmente sul HttpApplication), ma la creazione della sessione è molto a buon mercato. In altre parole, se si mantiene il più pulito il codice, più creazioni sessione non è necessariamente una cosa negativa. Penso che la documentazione NH dice meglio:

  

Un ISessionFactory è un   costoso da creare, threadsafe oggetto   destinato ad essere condiviso da tutti   thread dell'applicazione. Un ISession è un   poco costoso, oggetto non threadsafe   che dovrebbe essere utilizzato una sola volta, per un singolo   dei processi di business, e poi scartato.

Quindi, utilizzando il modello UoW non è probabilmente più efficiente a causa del sovraccarico in più, ma è una buona pratica e l'overhead non è probabilmente andando a farti del male. ottimizzazione prematura e tutto il resto.

Altri suggerimenti

Sì, è necessario utilizzare una transazione. Dal blog di Ayende:

"NHibernate per scontato che tutti gli accessi al database è fatto sotto una transazione, e fortemente scoraggiare l'uso di sessione senza una transazione".

Per ulteriori dettagli, ecco un link al suo blog di distacco:

http://ayende.com/Blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top