2014-12-17 3 views
3

'tI проблемы с созданием соединения на двух объектах с общим свойством, но они не являются картами вместе.NHibernate (+ FluentNhibernate): присоединяйся к двум снятым таблицам

Скажите, что у вас есть сущность Статья, содержащая свойство FamilyCode и сущность Семья со свойствами Code и Label.

В моих сопоставлениях статья не ссылается на семью, и я не хочу ее менять (чтобы поддерживать совместимость с другими внутренними и унаследованными методами).

Таким образом, я не могу перевести ниже запрос в NHibernate:

SELECT f.Code, f.Label 
FROM Article a 
INNER JOIN Family f ON a.FamilyCode = f.Code 
WHERE f.Label LIKE 'p%' 

Я не могу использовать JoinQuery, потому что я не могу придать QueryOver и я не konw, если это возможно с помощью WithSubquery ,

Я попытался выполнить QueryOver и QueryOver, а затем выполнить запись в памяти (после .List()), но у меня слишком много строк для статьи, поэтому требуется много времени.

У вас есть идеи?

Спасибо.

ответ

2

Мы можем использовать HQL - но только HQL.

Несколько классов могут появиться, в результате декартова произведения или "крест" присоединиться.

from Formula, Parameter 
from Formula as form, Parameter as param 

Так что будет путь с HQL

SELECT f.Code, f.Label 
FROM Article a, 
    Family f 
WHERE a.FamilyCode = f.Code 
AND f.Label LIKE 'p%' 

Проверить и этот 9.3.2. The IQuery interface и, возможно, это Q & A

+0

Ok, так что я не могу использовать QueryOver обозначения? Фактически, основная проблема заключается в том, что я не могу использовать LIKE с записью Linq. – Guillaume

+0

Для таких запросов, как вам нужен ответ, ** нет ** вы не можете использовать запрос. просто HQL. Каждый ORM связан с сопоставленными отношениями. Это оно. NHibernate имеет бонус (HQL), где мы можем его разбить. Но не для каких-либо других запросов ... –

+0

Хорошо, я вижу. спасибо – Guillaume

Смежные вопросы