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