Web ページに 10 個のデータベース呼び出しがあり、いずれもトランザクションなどを必要としない場合、それらはデータベースからデータを取得 (読み取り) しているだけですが、それでも作業単位クラスを使用する必要がありますか?
データベース呼び出しごとに新しいセッションを作成するのはコストがかかりすぎるためですか?
Web ページに 10 個のデータベース呼び出しがあり、いずれもトランザクションなどを必要としない場合、それらはデータベースからデータを取得 (読み取り) しているだけですが、それでも作業単位クラスを使用する必要がありますか?
データベース呼び出しごとに新しいセッションを作成するのはコストがかかりすぎるためですか?
NHibernate では、セッション ファクトリの作成は非常にコストがかかります (そのため、セッション ファクトリが作成されたら、おそらく でキャッシュする必要がありますHttpApplication
) が、セッションの作成は非常に安価です。言い換えれば、コードをきれいに保つのであれば、複数のセッションを作成することは必ずしも悪いことではありません。NHのドキュメントが最もよく言っていると思います:
ISessionFactory は、すべてのアプリケーション スレッドで共有されることを目的とした、作成にコストがかかるスレッドセーフなオブジェクトです。ISession は、単一のビジネス プロセスに対して一度だけ使用し、その後は破棄する必要のある、低コストで非スレッド セーフなオブジェクトです。
したがって、UoW パターンを使用することは、余分なオーバーヘッドがあるためおそらく効率的ではありませんが、良い習慣であり、オーバーヘッドが問題になることはおそらくないでしょう。時期尚早の最適化など。
はい、トランザクションを使用する必要があります。Ayende のブログから:
「NHibernate は、データベースへのすべてのアクセスがトランザクションの下で行われると想定しており、トランザクションなしでセッションを使用することを強くお勧めしません。」
詳細については、彼のブログ投稿へのリンクを次に示します。