Критерии присоединения и ограничения NHibernate - PullRequest
0 голосов
/ 27 января 2010

Я пытаюсь написать критерий NHibernate, который эффективно объединяет и ограничивает одновременно. Моя БД выглядит так ...

случаи ---> CustomerProducts <--- клиенты Случаи ---> CaseStatuses

Каждый случай связан с продуктом клиента (многие случаи с одним продуктом).

У каждого клиента есть несколько продуктов (один клиент имеет много продуктов).

Каждый случай дополнительно имеет статус дела (один статус дела для многих дел).

Это было сопоставлено с файлами XML, и разрешение между многими случаями и клиентами (через продукты клиента) было разрешено с помощью Наборов <> в сопоставлении CustomerProduct, что означает, что сущность CustomerProduct имеет наборы:

Пользователи

Случаи

Затем я создаю критерий, набранный как "Случаи" Критерии, которые мне нужно применить, это ....

  1. Статусы IN [различные коды состояния]. Это было достигнуто с ....

    crit.Add (Restrictions.In ("CaseStatus.CaseStatusId", статусы));

  2. Теперь мне нужно выбрать только случаи для определенного идентификатора клиента. Я пытался ...

    критериев. Добавить ("CustomerProduct.Customer.CustomerId", customerId);

Это не работает, и NHibernate говорит мне, что не может разрешить сопоставление с CustomerProduct.Customer.CustomerId.

У Case есть свойство объекта CustomerProduct.

CustomerProduct имеет свойство объекта Customer.

Клиент имеет свойство CustomerId.

Есть идеи, почему это не сработает?

Спасибо.

1 Ответ

4 голосов
/ 27 января 2010

Я думаю, вам нужно создать псевдоним для CustomerProduct.Customer:

criteria.CreateAlias("CustomerProduct", "customerProduct");
criteria.CreateAlias("customerProduct.Customer", "customer");
criteria.Add(Restrictions.Eq("customer.CustomerId", customerId));

Я удивлен, что ограничение IN работает без псевдонима. Вот хорошая статья о выполнении запросов на соединение с Criteria API.

...