Вопрос

Я обычно запрашиваю интерфейсы, используя детектирующиеcriterial в Nibernate:

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

И это работает нормально.

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

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

и добавьте его к критериям, как это (вид, p.child на самом деле псевдоним, но я упрощенный):

crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit));

Это работает, если мои детечкоклики для ребенка:

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

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

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

Это то, что должно быть или я скучаю по конфигурации?

Это было полезно?

Решение

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

Вам необходимо создать детектирующиеCRITERIA. Для <Child> (), а не интерфейс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top