NHibernate + QueryOver: Как присоединиться к несопоставленной сущности по ID? - PullRequest
0 голосов
/ 29 января 2019

дана таблица A со столбцами EntityType (Enum, которая указывает либо Entity / Table типа B, либо Entity / Table типа C) и EntityID (идентификатор записи в таблице B или таблице C).

Оба класса B и C реализуют интерфейс IBC, а класс A имеет свойство IBC.

Это работает, но когда у меня есть один A и свойство доступа IBC, он сделает еще один запрос, чтобы выбрать строку любой из таблиц Bили C. Если у меня много A, он будет выполнять много запросов.

Я хочу выполнить этот запрос с NHibernate QueryOver, чтобы больше не было дополнительных запросов:

select* из A левое соединение B b на b.ID = a.EntityID левое соединение C c на c.ID = a.EntityID

Есть ли возможность?

Спасибо.

1 Ответ

0 голосов
/ 29 января 2019

Проверьте последнюю функцию NH 5,0

17,5.Объединение сущностей без ассоциации (присоединения сущностей или специальные соединения)

small cite:

В QueryOver у вас есть возможность определить соединение с любой сущностью, а не только черезсопоставленная ассоциация.Для этого используйте JoinEntityAlias ​​и JoinEntityQueryOver.Например:

Cat cat = null;
Cat joinedCat = null;

var uniquelyNamedCats = sess.QueryOver<Cat>(() => cat)
    .JoinEntityAlias(
        () => joinedCat,
        () => cat.Name == joinedCat.Name && cat.Id != joinedCat.Id,
        JoinType.LeftOuterJoin)
    .Where(() => joinedCat.Id == null)
    .List();
...