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