È unità di lavoro più efficiente se non mi interessa per le transazioni, ecc?
-
06-09-2019 - |
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?
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: