Создание эффективного (но сложного) запроса NHibernate - PullRequest
0 голосов
/ 12 января 2010

Вот примерно наша модель данных (имена сущностей являются поддельными и используются только в качестве примера).

Продукт имеет отношение многие ко многим с Грузоотправитель . Грузоотправитель затем имеет отношение один ко многим с Складом .

В основном: Продукт имеет много Грузоотправителей , которые имеют много Складов .

У нас есть отображение от Продукт до Грузоотправитель и от Склад до Грузоотправитель . Но НЕ ОТ Грузоотправитель до Товар или Склад .

Я пытался создать запрос для возврата (на данный момент только подсчета) всех Складов , которые связаны с определенным Продуктом .

Первая попытка: Получил список Грузоотправителей из Продукта . Создан запрос для Склад , где Грузоотправитель был в нашем наборе. Это работает, но это два запроса. Нам нужен один запрос.

Ответы [ 2 ]

1 голос
/ 12 января 2010

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

from warehouse w 
where w.Shipper in 
     (select p.shippers from product p where p.id = 2) 
0 голосов
/ 12 января 2010

Оказывается, вам нужно сопоставление от Грузоотправитель до Продукт , чтобы сделать эту работу. Но ничего страшного, просто сделайте свойство без доступа "только для запроса".

Тогда это так же просто, как сделать дополнительный выбор:

var subcriteria = DetachedCriteria.For<Shipper>()
                .CreateCriteria("Products", "productsForCategory")
                .Add(Property.ForName("productsForCategory.Id").Eq(product.Id))
                .SetProjection(Projections.Id());

И затем помещаем это IN в другой запрос:

Session.CreateCriteria<Warehouse>()
                .Add(Subqueries.PropertyIn("Shipper", subcriteria))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...