NHibernate: Session.Save и Transaction.Commit - PullRequest
13 голосов
/ 26 августа 2009

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

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

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

1 Ответ

15 голосов
/ 26 августа 2009

Они различаются - Session.Save сохраняет объект, а Transaction.Commit совершает кучу работы (множественные операции получения, загрузки, сохранения, обновления и т. Д.).

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...