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 で別のモデル クラスにマップしました。