Ошибка при преобразовании запроса Nhibernate в общий список
9 pijush Dutta [2011-03-29 17:35:00]
У меня есть простой объект с именем EmployeeEntity
со свойствами ID
, Name
, Age
, Organisation
и Designation
. Я просто запрашиваю базу данных с помощью запроса
IQuery query = session.CreateQuery(
"select Name, Designation, Age, Organisation FROM EmployeeEntity " +
"group by Name, Designation, Age, Organisation");
IList<EmployeeEntity> employee = query.List<EmployeeEntity>(); // Throws error
но при преобразовании в мой тип это исключает исключение:
Не удалось выполнить запрос [SQL: SQL недоступен]
с InnerException
:
Значение "System.Object []" не относится к типу "NHibernateTest.EmployeeEntity" и не может использоваться в этой общей коллекции.
Имя параметра: значение
хотя он отлично работает с использованием этого запроса:
IQuery query = session.CreateQuery("select e FROM EmployeeEntity e group by e");
IList<EmployeeEntity> employee = query.List<EmployeeEntity>();
но я не хочу выбирать все столбцы, потому что они мне не нужны.
.net nhibernate
2 ответа
11 Vadim [2011-03-29 18:38:00]
Если вам нужен только определенный набор столбцов, создайте класс, который сопоставляет один к одному с вашими столбцами. Например:
public class EmployeeView
{
public string Name { get; set; }
public string Designation { get; set; }
public int Age { get; set; }
public string Organization { get; set; }
}
Вам просто нужно добавить трансформатор результата к вашему запросу
IQuery query = session
.CreateQuery("select Name ,Designation ,Age ,Organisation FROM EmployeeEntity group by Name ,Designation ,Age ,Organisation")
.SetResultTransformer(Transformers.AliasToBean<EmployeeView>());
Ilist<EmployeeEntity> employee= query.List<EmployeeView>();
4 Anton Gogolev [2011-03-29 17:49:00]
Когда вы запрашиваете select Name, Designation, Age, Organisation...
, NHibernate фактически вернет экземпляр IList<object[]>
. Чтобы преодолеть это, попробуйте переписать HQL на select new EmployeeEntity(Name, Designation, Age, Organisation)...
и добавить соответствующий конструктор в класс EmployeeEntity
.