Я знаю, что для много записей части, должен использовать транзакции в 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();
}
}
}
Лучшая рекомендация - всегда использовать транзакцию. Эта ссылка из документации NHProf лучше всего объясняет, почему.
Когда мы не определяем собственное транзакции, он возвращается в неявный режим транзакции, где каждый инструкция к базе данных выполняется в ее собственная сделка, в результате стоимость производительности (время базы данных до строить и закрывать транзакции), и пониженная консистенция.
Даже если мы только читаем данные, мы следует использовать транзакцию, потому что использование транзакций гарантирует, что мы получим согласованные результаты из базы данных. NHibernate предполагает, что любой доступ к база данных сделана под сделка и настоятельно не рекомендует любое использование сеанса без сделка.
(Кстати, если вы серьезно работаете с NHibernate, попробуйте NHProf).