Запрос NHibernate ищет связанный объект связанного объекта - PullRequest
1 голос
/ 12 апреля 2010

У меня проблема с запросом nHibernate, которая выглядит довольно прямо, но, похоже, я не могу ее решить!

Я создаю несколько простых примеров классов, чтобы проиллюстрировать мою проблему:

public class Car {
    public int Id { get; set; }
    public IList<Interior> InteriorParts { get; set; }
}

public class Interior {
    public int Id { get; set; }
    public InteriorProducer Producer { get; set; }
}

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

Теперь к запросу: у меня есть идентификатор InteriorProducer, но мне нужно получить список автомобилей, интерьер которых был произведен производителем интерьера.

Итак, в простом псевдо-SQL это выглядит примерно так:

select cars
where car.InteriorParts.Producer.Id = Id

Мне очень трудно обдумать это, чтобы создать запрос nHibernate.

Есть идеи?

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 апреля 2010
var cars = session
    .CreateCriteria<Car>()
    .CreateAlias("InteriorParts", "parts")
    .CreateAlias("parts.Producer", "producer")
    .Add(Expression.Eq("producer.Id", id))
    .List();

В зависимости от вашего случая вы также можете отфильтровать дубликаты автомобилей, которые будут выбраны из-за объединений SQL:

.SetResultTransformer(Transformers.DistinctRootEntity)
2 голосов
/ 12 апреля 2010

а в хкл ...

var query = session.CreateQuery
   ("select c from Cars c where c.InteriorParts.Producer.Id = :pid");
query.SetInt32("pid", producerId);
IList<Car> cars = query.List<Car>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...