2

Nhibernate 3.3 を使用して SQL Server 2008 R2 のローカル テーブルに結合する必要があるリンク サーバーからのリモート テーブルがあります。

私は Nhibernate 3.3.1.4000 と FluenNhibernate を使用してクラスをマップしています。通常の結合を使用すると機能しますが、非常に遅いです (約 30 秒)。

SQL サーバー管理スタジオで、「リモート」ヒントを使用すると、クエリは 1 秒以内に返されます。

スロー クエリ (30 秒以上)

Select table1.field1, table2.field2 from table1 inner join table2 on table1.id = table2.id

速い方(1秒以内)

Select table1.field1, table2.field2 from table1 inner remote join table2 on table1.id = table2.table1_id

コードでは、 nhibernate.linq を使用して結果を取得しています:

session.Query<table1>.FetchMany(x => table2s);

nhibernate に強制的に内部リモート結合を使用させる方法を探しています (これは非常に SQL サーバー固有であることを認識しています)。

また、エンティティ (table1) とその子 (table2) エンティティをロードするストアド プロシージャにエンティティをマップする方法を見つけようとしましたが、明確な方法が見つかりませんでした。ほとんどの場合、hbm ファイルを使用しますが、ストアド プロシージャから子コレクションをマップする方法がわかりません。

ありがとう。


完全を期すために、リモート結合を含む特別なビューを作成し、このビューを nhibernate で別のモデル クラスにマップしました。

4

1 に答える 1

1

そう簡単ではないと思います。

ユースケースで結合句を変更する独自のドライバーを作成できます。

ただし、このユース ケースのSQL クエリははるかに簡単です。複数の .AddEntity() を使用して行ごとに複数のエンティティを作成できると思いますが、それらをコードでグループ化する必要があります。

于 2013-09-27T13:42:45.303 に答える