首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NHibernate CreateSQLQuery

NHibernate CreateSQLQuery
EN

Stack Overflow用户
提问于 2012-09-20 21:01:37
回答 1查看 29.6K关注 0票数 14

我正在尝试使用NH CreateSQLQuery方法获取一些数据,例如

代码语言:javascript
复制
IList<Logistic> LCollection = sess.CreateSQLQuery(@"select * from some_schema.logistic")
                                           .SetResultTransformer(Transformers.AliasToBean(typeof(Logistic)))
                                           .List<Logistic>();

逻辑类是

代码语言:javascript
复制
public class Logistic
{
    public virtual long? l_id { get; set; }
    public virtual long? carrier_id { get; set; }
    ...
}

映射

代码语言:javascript
复制
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);
        ...
    }
}

但我有个错误

代码语言:javascript
复制
The type System.Decimal can not be assigned to a property of type System.Nullable`1[System.Int64] setter of MyNamespase.Logistic.l_id

你知道可能出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-20 21:54:58

当您想要检索轻量级AliasToBean而不是实体时,可以使用DTO转换器。(例如,如果您有一个概览屏幕,它只显示每个实体的一些基本信息,那么最好使用DTO并在使用AliasToBean转换器的NHibernate中创建一个查询,以便NH知道它不应该检索完整的实体)。

如果要使用SQL查询检索实体,则必须执行以下操作:

代码语言:javascript
复制
var query = sess.CreateSQLQuery(@"select {l.*} from some_schema.logistic as l");

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

return query.List<Logistic>();                                  

但是,我想知道在这种情况下为什么要使用原生SQL查询?为什么不使用HQLICriteriaQueryOver呢?

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12513191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档