Подтвердить что ты не робот

NHibernate CreateSQLQuery

Я пытаюсь получить некоторые данные с помощью метода NH CreateSQLQuery, например

IList<Logistic> LCollection = sess.CreateSQLQuery(@"select * from some_schema.logistic")
                                           .SetResultTransformer(Transformers.AliasToBean(typeof(Logistic)))
                                           .List<Logistic>();

логистический класс

public class Logistic
{
    public virtual long? l_id { get; set; }
    public virtual long? carrier_id { get; set; }
    ...
}

отображение

public class LogisticMap : ClassMap<Logistic>
{
    public LogisticMap()
    {
        Table("some_chema.logistic");
        Id(x => x.l_id).GeneratedBy.Sequence("some_chema.logistic_sq");
        Map(x => x.carrier_id);
        ...
    }
}

но у меня есть ошибка

The type System.Decimal can not be assigned to a property of type System.Nullable`1[System.Int64] setter of MyNamespase.Logistic.l_id

любая идея, что может быть неправильным?

4b9b3361

Ответ 1

Трансформатор AliasToBean используется, когда вы хотите получить легкий DTO вместо объектов. (Например, если у вас есть обзорный экран, который отображает только некоторую важную информацию для каждого объекта, то лучше использовать DTO и создать запрос в NHibernate, который использует трансформатор AliasToBean, чтобы NH знал, что он не должен получить полные объекты).

Если вы хотите получить объекты с использованием SQL-запроса, вам нужно сделать это следующим образом:

var query = sess.CreateSQLQuery(@"select {l.*} from some_schema.logistic as l");

query.AddEntity ("l", typeof(Logistic));

return query.List<Logistic>();                                  

Но, интересно, почему вы хотите использовать собственный SQL-запрос в этом случае? Почему бы не использовать HQL, ICriteria или QueryOver?