Как запросить NHibernate для определенного типа? - PullRequest
2 голосов
/ 25 февраля 2011

Я использую Fluent NHibernate с DiscriminateSubClassesOnColumn () для поддержки подклассов. Столбец, используемый для различения подклассов, не сопоставлен с фактическим свойством объекта.

Как мне создать запрос, который возвращает только объекты данного типа?

Вот моя попытка, где propertyName - это имя моего различающего столбца, а value - это имя типа:

return _db.CreateCriteria<T>()
            .Add(Restrictions.Eq(propertyName, value))
            .List<T>();

Однако это дает мне ошибку «не удалось разрешить свойство: Тип: [тип моей сущности]», потому что сама сущность не имеет свойства. Если я добавляю свойство к своей сущности и отображаю его, я получаю еще одну ошибку: «System.IndexOutOfRangeException: недопустимый индекс 7 для этой коллекции SqlParameterCollection с счетом = 7».

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Вы передаете тип универсальному параметру T. Например, если Cat и Dog расширяют абстрактный класс Animal:

return _db.CreateCriteria<Cat>()
        .List<Cat>();

возвращает всех кошек

    return _db.CreateCriteria<Animal>()
        .List<Animal>();

возвращает Кошек и Собак.

0 голосов
/ 25 февраля 2011

Вы должны просто создать критерий на основе интересующего вас подкласса. Например, если ваша иерархия сущностей содержит EntityB, производную от EntityA, и вы просто хотите, чтобы EntityB просто выполнял:

session.CreateCriteria<EntityB>().List();

, и вы будетеполучить все сущности типа сущность B. Нет причин явно работать с дискриминатором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...