Подтвердить что ты не робот

NHibernate: Session.Save и Transaction.Commit

Есть ли разница между Session.Save и Transaction.Commit?

Когда я должен использовать, который?

Кажется, что иногда Session.Save должен использоваться вместе с Transaction.Commit, иногда нет. Может кто-нибудь сказать, почему это так?

4b9b3361

Ответ 1

Они differenrt-- Session.Save сохраняет объект, а Transaction.Commit выполняет кучу работы (несколько Gets, Loads, Saves, Updates и т.д.).

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

В ISession каждая операция базы данных происходит внутри транзакции который изолирует операции с базой данных (даже операции только для чтения).

Если вы явно не определяете свою транзакцию, она будет создана неявно каждый раз, когда вы будете читать или записывать в базу данных. Не очень эффективно. Поэтому, даже если вы просто читаете, вы захотите поместить все в транзакцию и совершить транзакцию, когда закончите. Айенде Рахиен объясняет далее этот пост в блоге.

Если вы посмотрите на некоторые примеры кода, может показаться, что люди не используют транзакции, но они могут просто начать/совершить транзакцию за пределами кода, который вы просматриваете. Например, в моем приложении ASP.Net MVC я использую фильтр действий (TransactionAttribute) для обработки транзакции вне моих действий с контроллером.