2009-08-26 5 views
12

Session.SaveTransaction.Commitの間に違いはありますか?NHibernate:Session.Save and Transaction.Commit

どちらを使用する必要がありますか?

Session.SaveTransaction.Commitと組み合わせて使用​​する必要があります。誰がこれがなぜそうだと言うことができますか?

+1

Transmission.CommitまたはTransaction.Commit? – twk

答えて

13

これは差分です。Session.Saveはオブジェクトを保存し、Transaction.Commitは複数の作業(複数の取得、読み込み、保存、更新など)を行います。

あなたは両方を使いたいでしょう。もっと読むためのリンクが付いた簡単な説明があります。 NHibernateのドキュメントには、次の言葉:ISession

、すべてのデータベース操作は、データベース操作(でも、読み取り専用の操作を)分離トランザクション 内部で発生します。

トランザクションを明示的に定義しないと、データベースに読み書きするたびに暗黙的にトランザクションが作成されます。あまり効率的ではありません。だから読んでいても、トランザクションの中にすべてを入れ、完了したらトランザクションをコミットしたいと思うでしょう。 Ayende Rahienはさらにthis blog postで説明します。

いくつかのコードサンプルを見ると、人々がトランザクションを使用していないように見えるかもしれませんが、あなたが見ているコードの外でトランザクションを開始/コミットしているだけかもしれません。私のASP.Net MVCアプリケーションでは、たとえば、私はコントローラーアクションの外でトランザクションを処理するためにアクションフィルター(TransactionAttribute)を使用します。

+0

良い説明:TransactionAttributeの提案の+1 – Graviton