Я предлагаю NHibernate для проекта, который мы делаем в моей компании, и я хотел бы знать, можно ли оптимизировать NHibernate для получения только определенных столбцов таблицы при использовании языка запросов Criteria.
Например. Скажем, у меня есть таблица с 30 столбцами на ней, и это сопоставляется с объектом, использующим NHibernate, который является сопоставлением 1-для-1 с таблицей. Однако для конкретной функции системы я забочусь обо всех этих столбцах.
Теперь я знаю, что могу использовать HQL и сделать CreateQuery
, который выполнит это, но для этого требуется создать конструктор для каждой комбинации полей, которые я бы хотел выборочно извлечь. Это может быть огромной болью с точки зрения обслуживания, так как я не буду ловить отсутствующие конструкторы до времени выполнения.
Мне нравится язык запросов Criteria, поскольку он создает параметризованный SQL вместо прямых SQL-запросов из HQL. Я вижу, что есть модель "Исключить" для исключения определенных столбцов, но в большинстве случаев я буду включать больше столбцов, чем исключать.
Благодаря комментарию ниже я просмотрел прогнозы, и это все еще не совсем идеальная ситуация для меня. При использовании следующего:
var list = session
.CreateCriteria(typeof (Task))
.SetProjection(Projections
.ProjectionList()
.Add(Projections.Property("Id")))
.List();
Я получаю переменную list
, просто являющуюся ints, я бы предпочел иметь свой полный объект Task, но со всеми полями, установленными в их значения по умолчанию. Возможно ли это? Все, что я вижу до сих пор, говорит "нет".