Должен ли я всегда использовать транзакции в nhibernate (даже для простого чтения и записи)? - PullRequest
14 голосов
/ 22 июля 2010

Я знаю, что для многочастных записей я должен использовать транзакции в nhibernate.Однако насчет простого чтения и записи (1 часть) ... Я читал, что это хорошая практика - всегда использовать транзакции.Это обязательно?

Должен ли я сделать следующее для простого чтения ??или я могу просто отбросить часть транзакции вместе?

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

или

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

А как насчет простых записей?

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

1 Ответ

21 голосов
/ 22 июля 2010

Лучшая рекомендация - всегда использовать транзакцию. Эта ссылка из документации NHProf лучше всего объясняет почему.

Когда мы не определяем наши собственные транзакции, она возвращается в режим неявных транзакций, где каждый оператор в базе данныхвыполняется в своей собственной транзакции, что приводит к большим затратам на производительность (время базы данных для создания и разделения транзакций) и снижению согласованности.

Даже если мы только читаем данные, нам следует использовать транзакцию, потому что мы используем транзакциигарантирует, что мы получаем последовательные результаты из базы данных.NHibernate предполагает, что весь доступ к базе данных осуществляется в рамках транзакции, и настоятельно рекомендует не использовать сеанс без транзакции.

(Кстати, если вы выполняете серьезную работу NHibernate, попробуйте попробовать NHProf).

...