c# - NHibernate CreateSQLQuery

标签 c# nhibernate

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

知道哪里出了问题吗?

最佳答案

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

如果您想使用 SQL 查询检索实体,您必须这样做:

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

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

return query.List<Logistic>();                                  

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

关于c# - NHibernate CreateSQLQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12513191/

相关文章:

c# - 强制外部进程在一段时间后被杀死

c# - 在 C# 中更新 NHibernate 3.3 中的子级

c# - ListBox 鼠标悬停时的 ListBoxItem 索引

c# - 无法对来自 xml 的数据执行乘法

.net - ORM 工具或手动将对象构建到关系映射层

c# - 网站引用了一个使用 NHibernate 与数据库对话的控制台应用程序

nhibernate - 代码生成器不好吗?

NHibernate:查找脏集合

c# - 如何从静态类的静态属性中获取值?

c# - 用户可以使用哪些键离开 WPF 文本框?