Расширение Nhibernate для использования «внутреннего удаленного соединения» в выборке или сопоставлении

У меня есть удаленная таблица с связанного сервера, в которой мне нужно присоединиться к локальной таблице в SQL Server 2008 R2 с помощью Nhibernate 3.3.

Я использую Nhibernate 3.3.1.4000 и FluenNhibernate для сопоставления класса. Он работает, если я использую обычное соединение, но он очень медленный (около 30 секунд).

В студии управления SQL-сервером, если я использую «удаленный» подсказку, запрос возвращается менее чем за секунду.

Медленный запрос (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 с другим классом модели.

Я думаю, это не так просто.

Вы можете написать свой собственный Драйвер, который изменяет предложение соединения в прецеденте.

Однако запрос sql для этого варианта использования может быть намного проще. Я думаю, вы можете иметь несколько сущностей в строке с несколькими .AddEntity (), но вам нужно сгруппировать их в код.

Давайте будем гением компьютера.