【问题标题】:NHibernate CreateSQLQueryNHibernate CreateSQLQuery
【发布时间】:2012-09-20 13:01:37
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

  • 检查数据库中的 l_id 列是否有十进制数据

标签: c# nhibernate


【解决方案1】:

当您想要检索轻量级 DTO 而不是实体时,使用 AliasToBean 转换器。 (例如,如果您有一个仅显示每个实体的一些基本信息的概览屏幕,那么最好使用 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 查询?为什么不使用HQLICriteriaQueryOver

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多