NHibernate: Сессия.Сохранение и транзакция.Совершать
Есть ли разница между Session.Save
и Transaction.Commit
?
Когда я должен использовать какой?
Кажется, что иногда Session.Save
нужно использовать в сочетании с Transaction.Commit
, иногда нет. Может ли кто-нибудь сказать, почему это так?
1 ответ:
Они различны -
Session.Save
сохраняет объект иTransaction.Commit
совершает кучу работы (несколько получает, загружает, сохраняет, обновляет и т. д.).Вы захотите использовать оба варианта. Вот краткое объяснение со ссылкой для дальнейшего чтения. В документации NHibernate говорится следующее:
В
ISession
каждая операция базы данных выполняется внутри транзакции это изолирует операции базы данных (даже операции только для чтения).Если вы явно не определяете свою транзакцию, один будет создаваться неявно при каждом чтении или записи в базу данных. Не очень эффективно. Поэтому, даже если вы просто читаете, вам захочется поместить все в транзакцию и зафиксировать транзакцию, когда вы закончите. Ayende Rahien далее поясняет в в этом блоге.
Когда вы смотрите на некоторые примеры кода, может показаться, что люди не используют транзакции, но они могут просто начать / совершить транзакцию вне кода, на который вы смотрите. В моем ASP.Net например, в приложении MVC я использую фильтр действий (TransactionAttribute)для обработки транзакций вне действий контроллера.