NHibernate CreateSQLQuery

max*_*s87 13 c# nhibernate

我试图用NH CreateSQLQuery方法获取一些数据

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

后勤课是

public class Logistic
{
    public virtual long? l_id { get; set; }
    public virtual long? carrier_id { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

制图

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);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但我有错误

The type System.Decimal can not be assigned to a property of type System.Nullable`1[System.Int64] setter of MyNamespase.Logistic.l_id
Run Code Online (Sandbox Code Playgroud)

什么可能是错的?

Fre*_*els 26

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>();                                  
Run Code Online (Sandbox Code Playgroud)

但是,我想知道为什么你想在这种情况下使用本机SQL查询?为什么不使用HQL,ICriteriaQueryOver