NHibernate: выражение критерия для получения ненулевого связанного класса один к одному - PullRequest
4 голосов
/ 19 ноября 2008

У меня есть два класса, которые связаны с однозначным отображением:

<class name="Employee" table="Employees">
  ...
  <one-to-one name="Address" class="AddressInfo">
  ...
</class>

Я хотел бы использовать выражение критерия, чтобы получить только тех сотрудников, для которых связанный класс Address не равен нулю, что-то вроде этого (что, я знаю, не работает):

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .Add( Expression.IsNotNull("Address") )
    .List();

Полагаю, это действительно сложный вопрос, или почти никто не пытался это сделать?

Ответы [ 2 ]

5 голосов
/ 26 ноября 2008

Вы пытались создать псевдоним для свойства Address и проверить, не является ли ID / первичный ключ адреса нулевым?

Что-то вроде:

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .CreateCriteria("Address", "address").Add( Expression.IsNotNull("Id") )
    .List();
0 голосов
/ 27 ноября 2008

Чтобы неявно вызывать псевдоним / соединение для одного-к-одному, разве вы не должны использовать точечную нотацию? А потом проверяем любое поле в вашем Address-классе:

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .Add( Expression.IsNotNull("Address.Id") )
    .List();

Это, вероятно, тот же подход, что и у Карины, но я считаю, что он равен .CreateAlias ​​(). С CreateAlias ​​вы можете указать FetchMode (тип используемого объединения), но так как вам нужны строки с соответствующими адресами, это не должно быть обязательным (потому что INNER по умолчанию). Также не обязательно проверять, является ли оно нулевым.

IList employeesWithAddresses = sess.CreateCriteria(typeof(Employee))
    .CreateAlias("Address")
    .List();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...