Использование критериев для получения только базовых типов - PullRequest
1 голос
/ 05 октября 2009

Я ищу способ в Fluent NHibernate получить список всех объектов типа PARENT используя критерии. У меня есть объект отца и производный ребенок. Отец содержит список детей.

Проблема в том, что когда я использую:

ICriteria crit = session.CreateCriteria(typeof(Parent))
IList<Parent> myRes = crit.List<Parnet>()

NH возвращает обратно список как родительских элементов, так и производных дочерних элементов, что является «правильным», потому что я спросил об этом, но это не то, что мне нужно. (дочерние элементы должны быть только внутри родительского объекта, но так как они также имеют тип parent - так как они получены из него ... NH также выводит их, используя этот метод.)

Как я могу получить список всех моих элементов "папа" без производных детей?

Это из первого ответа (@Stefan Steinegger's)

session
  .CreateQuery("from Parent where Parent.class == :class")
  .AddType(typeof(Parent));

Похоже, мне нужно что-то подобное, но это не работает в Fluent NHibernate.

Спасибо, Dani

1 Ответ

0 голосов
/ 05 октября 2009

вопрос на самом деле: как вы определяете, является ли Parent корневым родителем? Существуют различные подходы:

  • Вы сохраняете свою модель и определяете: корень - это Родитель, который не наследуется и не входит ни в какой другой Родитель.

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

Часть "не включена ни в какой другой Родитель" трудно найти эффективным способом.

  • Вы устанавливаете ссылку на родительский объект. Корень - это Parent, где его родительский элемент ссылается на ноль.

  • Вы получаете свой Root из общего базового класса. Ребенок больше не является Корнем, а Корень - это Root.

Предлагаю воспользоваться последним вариантом.


Кстати: вы можете фильтровать по точному типу, но только с использованием HQL.

session
  .CreateQuery("from Parent where Parent.class == :class")
  .AddType(typeof(Parent));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...