Именованные запросы и проекции Nhibernate SQL

Я сопоставил класс с таблицей SQL Server и использовал именованный запрос SQL для извлечения из него некоторых строк. Также мне не нужны все столбцы на определенных страницах (например, если это документ, я хочу отображать его полное содержимое только на странице «Просмотр сведений», в то время как его заголовок может быть в списке, а «Просмотр сведений» страница.

Если я не выберу все столбцы рассматриваемой таблицы, я получу исключение IndexOutOfRangeException для столбцов, которые я пропустил.

Есть ли способ проецировать только интересующие меня столбцы в именованных запросах или мне нужно создавать дополнительные POCO для разных областей приложения?

С уважением, Ф.


person Michali    schedule 30.11.2010    source источник
comment
Ваше определение таблицы и проекционный запрос помогут ответить на этот вопрос. Кстати. Есть ли причина, по которой вы используете SQL-запрос, а не HQL, Criteria, LINQ и т. д.? Запросы SQL предназначены только для крайних случаев, когда другие механизмы запросов не могут генерировать оптимальный SQL.   -  person James Kovacs    schedule 01.12.2010
comment
Мне нужно получить первые X строк из таблицы с такими столбцами, как DocumentTitle, Text, PublishDate, AddDate, EditDate, Caption, AuditedBy. На странице списка я хочу показать только DocumentTitle и PublishDate. Он имеет сопоставление XML с классом С#, и пока я извлекаю все столбцы в запросе, он работает нормально.   -  person Michali    schedule 01.12.2010
comment
Поскольку я новичок в NHibernate, и в веб-приложении, которое мы создаем, будет много запросов, я предпочитаю придерживаться SQL, а не проверять файлы журналов, чтобы увидеть, какой тип SQL генерируется и насколько он эффективен. . Criteria имеет хороший API и предоставляет объектно-ориентированный способ запроса данных, и я мог бы в конечном итоге использовать его.   -  person Michali    schedule 01.12.2010


Ответы (1)


Вы хотите специальное сопоставление NHibernate.

PS: Как уже говорили другие, вы должны хотя бы взглянуть на HQL, Критерии или NHibernate.Linq. А чтобы легко обрабатывать сгенерированный SQL, каждый использует NHibernate Profiler.

person rebelliard    schedule 01.12.2010
comment
Критерии прекрасно подойдут в этом случае. - person Michali; 02.12.2010