0

私はSQLサーバー機能でNHibernateを高度に使用しているように見えるものを作ろうとしています。
NHibernate の ICriteria インターフェイスを使用して、リストビューのページング、並べ替え、およびフィルタリングを提供しています。ビジネス オブジェクトの 1 つは、3 つの異なるテーブルからのアイテムの集約です。DB でこの集計を行うために、transact-sql 関数を使用してパラメーターを受け取りました。
関数を呼び出すために、session.GetNamedQuery によって返される IQuery インターフェイスを使用しています。しかし、ページング/フィルタリング/ソート コードを使用するには、ICriteria インターフェイスを使用したいと思います。それを達成するために、私は次のことを考えました:

  1. 新しいトランザクションを開く
  2. グローバル一時テーブルを作成する関数を呼び出す (現在のように結果を返す代わりに)
  3. 何らかの形でNHibernateマッピングを変更して、一時テーブルに適用されるようにします(それができるかどうかはわかりません。また、これはトランザクションを作成するスコープに固有でなければなりません...)
  4. ICriteria インターフェイスを使用して、新しいマッピングを使用して新しいテーブルでクエリを実行します
  5. 一時テーブルを削除する

いくつかの質問があります:

  1. 代替案を提案できますか?
  2. 実行時に、特定のコード スコープに対してローカルで NHibernate マッピングのテーブルを置き換えることは可能ですか?
  3. 一時テーブルを生成して破棄するには、どのくらいのコストがかかりますか?
4

3 に答える 3

1

関数をビューに置き換えることはできますか? このビューは、3 つのテーブルを集約し、NHibernate によってマップされ、簡単にページング/ソート/フィルター処理できます。

于 2010-01-18T16:11:04.087 に答える
1

ここで正確にこれを行う方法を示すブログ投稿を書きました: nhibernate と sql サーバーの一時テーブルを使用したパフォーマンス集約型クエリのページネーション

于 2011-02-11T16:48:29.900 に答える