NHibernate CreateAlias ​​и ограничения не фильтрует коллекцию - PullRequest
0 голосов
/ 18 апреля 2011

Я застрял на этом и не могу найти выход: /

Я пытаюсь сделать что-то подобное (T-SQL).Прекрасно работает в MS SQL Managment Studio

select *
from Product join Price on (Product.ID = Price.ProductID)
where Product.ID = '15' and Price.ShopID = '20'

Я создал критерии вроде этого

Product p = session.CreateCriteria<Product>("product")
                                  .Add(Restrictions.IdEq(productId))
                                  .CreateAlias("prices", "productPrice")
                                  .Add(Restrictions.Eq("productPrice.shop.id", shopId))
                                  .UniqueResult<Product>();

И я получаю это при выполнении верхнего кода.Это выглядит примерно так же, верно?Но когда я отлаживаю и проверяю возвращенный продукт (здесь 'p'), я получаю все цены, с которыми он соотносится: / не только тот, который имеет значение ShopId = '20 '.Я гарантирую вам, что в базе данных есть только один такой.

NHibernate: SELECT this_.id as id3_1_, this_.name as name3_1_, this_.description
 as descript3_3_1_, productpri1_.id as id2_0_, productpri1_.productPrice as prod
uctP2_2_0_, productpri1_.ProductID as ProductID2_0_, productpri1_.ShopID as Shop
ID2_0_ FROM [Product] this_ inner join [Price] productpri1_ on this_.id=productp
ri1_.ProductID WHERE this_.id = @p0 and productpri1_.ShopID = @p1;@p0 = 15 [Type
: Int32 (0)], @p1 = 20 [Type: Int32 (0)]

Может ли кто-нибудь указать мне, что я здесь не так делаю?

1 Ответ

1 голос
/ 18 апреля 2011

Это по замыслу.Вы не можете отфильтровать коллекцию, используя ограничение.

Если вы присмотритесь, NHibernate отправляется в БД дважды: один раз с вашим запросом и один раз для получения коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...