16 votes

Devrais-je toujours utiliser des transactions dans nhibernate (même pour des lectures et écritures simples) ?

Je sais que pour les écritures en plusieurs parties, je dois utiliser des transactions dans nhibernate. Mais qu'en est-il des lectures et écritures simples (1 partie) ... J'ai lu qu'il était bon de toujours utiliser des transactions. Est-ce obligatoire ?

Dois-je faire ce qui suit pour une simple lecture ?? ou puis-je simplement abandonner la partie transactionnelle complètement ?

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);              
    }
}

Et pour les écritures simples ?

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

24voto

driis Points 70872

La meilleure recommandation serait toujours d'utiliser une transaction. Ce lien de la documentation NHProf explique le mieux pourquoi.

Lorsque nous ne définissons pas nos propres transactions, cela tombe en mode transaction implicite, où chaque instruction vers la base de données s'exécute dans sa propre transaction, entraînant un coût de performance élevé (temps de la base de données pour construire et détruire les transactions), et une cohérence réduite.

Même si nous ne faisons que lire des données, nous devrions utiliser une transaction, car l'utilisation de transactions garantit que nous obtenons des résultats cohérents de la base de données. NHibernate suppose que tout accès à la base de données est effectué sous une transaction, et déconseille fortement toute utilisation de la session sans transaction.

(Au fait, si vous travaillez sérieusement avec NHibernate, pensez à essayer NHProf).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X