У меня есть схема базы данных, где у меня есть Product
, Category
, CategoryFeature
и ProductCategoryFeatureValue
.
Модель сопоставлена с использованием Fluent NHibernate, но в основном выглядит следующим образом.
Product
-------
ID
Title
Category
--------
ID
Title
CategoryFeature
---------------
ID
CategoryID
Title
ProductCategoryFeatureValue
---------------
ID
ProductID
CategoryFeatureID
_______________________
Category [one] <-> [many] CategoryFeature
Product [many] <-> [many] ProductCategoryFeatureValue
Основные функции, доступные для продукта, перечислены в таблице ProductCategoryFeatureValue
, которая является «средней связью» для коллекции «многие ко многим».
Мне нужно создать запрос, где я могу найти все продукты, которые имеют ВСЕ функции, выбранные пользователем.
Например, выполняя поиск двух функций с идентификаторами 643229 и 667811 в терминах SQL, я бы сделал что-то вроде этого:
SELECT * FROM Product
JOIN ProductCategoryFeatureValue AS feature1 ON Product.id = feature1.ProductID AND feature1.categoryfeatureid = 643229
JOIN productcategoryfeaturevalue AS feature2 ON Product.id = feature2.ProductID AND feature2.categoryfeatureid = 667811
Другой запрос, который я мог бы сделать, это:
SELECT * FROM product WHERE
((SELECT id FROM productcategoryfeaturevalue AS feature1 WHERE feature1.ItemGroupID = product.id AND feature1.categoryFeatureID = 643229 LIMIT 1) IS NOT NULL)
AND
((SELECT id FROM productcategoryfeaturevalue AS feature2 WHERE feature2.ItemGroupID = product.id AND feature2.categoryFeatureID = 667811 LIMIT 1) IS NOT NULL)
Оба были проверены и работают хорошо.Тем не менее, я не могу воспроизвести их с помощью NHibernate.Есть идеи?
Спасибо!