Использование интерфейса для подзапроса в NHibernate - PullRequest
2 голосов
/ 21 апреля 2010

Я обычно запрашиваю интерфейсы, используя DetachedCriteria в NHibernate:

DetachedCriteria crit = DetachedCriteria.For<IParent>();

И это прекрасно работает.

Теперь я хочу создать подзапрос для дочернего объекта следующим образом:

DetachedCriteria subcrit = DetachedCriteria.For<IChild>();

и добавьте его к критериям, подобным этому (вроде как p.Child на самом деле псевдоним, но я упростил) crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit)); Это работает, если мой DetchedCriteria для ребенка:

DetachedCriteria subcrit = DetachedCriteria.For<Child>();

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

NHibernate.MappingException: No persister for: Domain.Name.Space.IChild

Это то, что должно быть, или мне не хватает какой-либо конфигурации?

1 Ответ

0 голосов
/ 24 декабря 2013

Я не думаю, что в этом случае вы сможете выполнять запросы к интерфейсу, поскольку NHibernate не сможет найти правильный реализующий класс, к которому вы собираетесь обращаться. Например, предположим, что у вас есть другой разработчик IChild с именем ChildLight (или что-то, что сопоставлено с другой таблицей), NHibernate не имеет направления, для которого должен быть реализован реализующий класс.

Вам необходимо создать DetachedCriteria.For (), а не интерфейс.

...