Рассмотрим этот упрощенный пример:
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
чтобы фильтр имел смысл?
Или есть какой-то элегантный альтернативный подход, кроме того, что мне приходится добавлять их вручную при запросе сущностей?