2010-07-21 4 views
14

Je sais que pour les écritures multi-parties, je devrais utiliser des transactions dans nhibernate. Mais qu'en est-il de la simple lecture et écrit (1 partie) ... J'ai lu que c'est une bonne pratique de toujours utiliser les transactions. Est-ce nécessaire?Devrais-je toujours utiliser des transactions dans nhibernate (même pour de simples lectures et écritures)?

Dois-je faire ce qui suit pour une lecture simple? ou puis-je simplement laisser tomber la partie de la transcription tout le monde?

public PrinterJob RetrievePrinterJobById(Guid id) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      var printerJob2 = (PrinterJob) session.Get(typeof (PrinterJob), id); 
      transaction.Commit(); 

      return printerJob2; 
     } 
    } 
} 

ou

public PrinterJob RetrievePrinterJobById(Guid id) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     return (PrinterJob) session.Get(typeof (PrinterJob), id);    
    } 
} 

Qu'en est-il pour les écritures simples?

public void AddPrintJob(PrinterJob printerJob) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      session.Save(printerJob); 
      transaction.Commit(); 
     } 
    } 
} 
+7

Bonne réponse sur SO: http://stackoverflow.com/questions/1657465/nhibernate-transactions-on-reads –

Répondre

21

La meilleure recommandation serait de toujours utiliser une transaction. This link from the NHProf documentation, explique mieux pourquoi.

Lorsque nous ne définissons pas nos propres transactions, il retombe dans mode de transaction implicite, où chaque déclaration à la base de données fonctionne dans sa transaction propre , ce qui entraîne un coût important de la performance (temps de base de données à construire et démonter les transactions), et la cohérence réduite.

Même si nous ne la lecture des données, nous devrait utiliser une transaction, car en utilisant les transactions assure que nous obtenons des résultats cohérents de la base de données. NHibernate suppose que tous les accès à la base de données est fait sous une transaction , et déconseille fortement toute utilisation de la session sans transaction .

(BTW, si vous faites un travail sérieux NHibernate, envisager d'essayer NHProf).

Questions connexes