nhibernate многоманый запрос - PullRequest
0 голосов
/ 18 августа 2011

Я новичок в nhibernate и пытаюсь создать запрос к базе данных с множеством ссылок между элементами и категориями.

У меня есть база данных с 3 таблицами: элементы, категории и элемент категории таблицы поиска, подобный этому:

  • категорий - первичный ключ categoryId

  • items - первичный ключ itemId

  • categoryItem - столбец categoryIdи столбец itemId

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

public IList<Item> GetItemsForCategory(Category category)
        {

//detached criteria

DetachedCriteria itemIdsCriteria = DetachedCriteria.For(typeof(Category))     
                .SetProjection(Projections.Distinct(Projections.Property("Item.Id")))     
                .Add(Restrictions.Eq("Category.Id", category.Id)); 

                 criteria.Add(Subqueries.PropertyIn("Id", itemIdsCriteria));

            return criteria.List<Item>() as List<Item>;


}

У меня есть толькобизнес-объекты для категории и позиции.Как создать метод репозитория для поиска элементов для определенной категории?

1 Ответ

1 голос
/ 18 августа 2011

Я предполагаю, что ваши классы выглядят так:

class Item
{
  // id and stuff
  IList<Category> Categories { get; private set; }
}

class Category
{
  // id and stuff
}

запрос (HQL)

session.CreateQuery(@"select i
from Item i
  inner join i.Categories c
where 
  c = :category")
.SetEntity("category", category)

Критерии

session
  .CreateCriteria(typeof(Item))
  .CreateCriteria("Categories", "c")
  .Add(Restrictions.Eq("c.Id", category.Id))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...