Фильтр NHibernate со столбцом внешней таблицы, который может быть не включен в запрос - PullRequest
0 голосов
/ 21 сентября 2018

Рассмотрим этот упрощенный пример:

public class Entity
{
    public int Id { get; set; }

    public string Name { get; set; }
}

public class EntityPermission
{
    public int EntityId { get; set; }

    public int UserId { get; set; }
}

Предположим, что сущности были сопоставлены с использованием файлов hbm.xml.

Теперь давайте предположим, что приложение запрашивает список сущностей, подобный этому:

Session.Query<Entity>().Where(x => Name == "whatever").ToList();

Это приведет к SQL-выражению, подобному следующему:

SELECT 
    [ent].[Id],
    [ent].[Name]
FROM
    [dbo].[Entities] [ent]
WHERE
    [ent].[Name] = 'whatever'

Я бы хотел, чтобы NHibernate сгенерировал для меня следующий SQL-оператор:

SELECT 
    [ent].[Id],
    [ent].[Name]
FROM
    [dbo].[Entities] [ent]
LEFT JOIN
    [dbo].[EntityPermissions] [perm]
ON
    [perm].[EntityId] = [ent].[Id]
WHERE
    [ent].[Name] = 'whatever'
AND
    [perm].[UserId] = :UserIdFilter.UserId

Iзнаю, что я могу определить UserIdFilter с параметром UserId, чтобы заставить NHibernate автоматически заменить деталь :UserIdFilter.UserId на установленное значение фильтра (т. е. установлен текущий пользователь или w / e), но возможно ли сделать так, чтобы NHibernate автоматически добавил, чтоLEFT JOIN чтобы фильтр имел смысл?

Или есть какой-то элегантный альтернативный подход, кроме того, что мне приходится добавлять их вручную при запросе сущностей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...