Автоматическое сопоставление результатов в SQL в ActiveRecord - PullRequest
0 голосов
/ 11 марта 2011

В Castle ActiveRecord я запрашиваю базу данных с session.CreateSQLQuery(MyQueryString).List()

Когда столбцы результатов запроса не совпадают на 100% с полями любой из моих таблиц базы данных, я не могу использовать класс на основе ActiveRecord для автоматизации результатов в строго типизированный объект.

Есть ли способ получить результаты специального запроса, сопоставленного с пользовательским типом (возможно, через атрибуты ActiveRecord в моем целевом классе?) Без необходимости сопоставлять поле за полем в коде выполнения / обработки запроса? Я думаю что-то похожее на:

MyQueryResultType[] results = session.CreateSQLQuery(MyQueryString).List().MapFieldsAs<MyQueryResultType>();

1 Ответ

1 голос
/ 12 марта 2011

Я некоторое время не использовал ActiveRecord, но насколько я помню, он использует NHibernate внизу, который может справиться с этим.Ниже приведен некоторый код, беззастенчиво извлеченный из другого вопроса / ответа о переполнении стека :

IList<MyObj> reults = Session.CreateQuery("select r.feedname as feedname, count(r.feedurl) as feedcount from rsssubscriptions r group by r.feedname")
                                                .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(MyObj)))
                                                .List<MyObj>();

Хотя функции «MapFieldAs» нет, есть функция «SetResultTransformer».Эта функция позволяет вам передать объект, который описывает, что должно быть сделано после получения результатов из базы данных.Для того, чтобы запрос запросил данные и отобразил столбцы в список строго типизированных объектов, вы должны определить объект-преобразователь, который будет делать это.К счастью, NHibernate также имеет универсальный объект-преобразователь, который вы можете использовать (NHibernate.Transform.Transformers.AliasToBean).

Вот несколько ответов о переполнении стека с примерами:

NHibernate:возвращение строго типизированного списка с применением агрегатной функции

Использование несопоставленного класса с именованным запросом NHibernate

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