将nhibernate <loader>元素与HQL查询一起使用

Mat*_*att 5 c# nhibernate hql nhibernate-mapping

我试图在<loader>元素中使用HQL查询来加载基于其他实体的实体.

我的班级如下

public class ParentOnly
{
    public ParentOnly(){}
    public virtual int Id { get; set; }
    public virtual string ParentObjectName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且映射看起来像这样

<class name="ParentOnly">
  <id name="Id">
    <generator class="identity" />
  </id>
  <property name="ParentObjectName" />
  <loader query-ref="parentonly"/>
</class>

<query name="parentonly" >
  select new ParentOnly() 
  from SimpleParentObject as spo
  where spo.Id = :id
</query>
Run Code Online (Sandbox Code Playgroud)

我正在尝试映射的类是SimpleParentObject,它有自己的映射,可以加载和保存而不会出现问题.

当我调用session.Get <ParentOnly>(id)时,sql对SimpleParentObject表运行正确,并且实例化了一个ParentOnly对象(因为我可以单步执行构造函数),但只返回null,而不是实例化的ParentOnly对象.

我可以使用而不是HQL成功地做到这一点,但我试图以独立于数据库的方式构建它.

有关如何获取<loader><query>元素返回填充的ParentOnly对象的任何想法......?

谢谢

马特

eep*_*ble 0

根据我对 nHibernate 文档的理解,更改 select 语句应该可以解决此问题。

<query name="parentonly" >
  select ParentObjectNameAS {spo.Name}, Id AS {spo.Id}
  from SimpleParentObject as spo
  where spo.Id = :id
</query>
Run Code Online (Sandbox Code Playgroud)

来源: http: //www.nhforge.org/doc/nh/en/