Nhibernate - 执行一些简单的HQL

时间:2010-04-16 13:54:55

标签: asp.net nhibernate fluent-nhibernate hql

我已经在.hmb.xml中映射了实体,并为类中的所有实体定义了属性。

我有一些基本的成就,并使用下面的代码获得所有记录。

public List<DevelopmentStep> getDevelopmentSteps()
   {
       List<DevelopmentStep> developmentStep;
       developmentStep = Repository.FindAll<DevelopmentStep>(new OrderBy("Id", Order.Asc));
       return developmentStep;
   } 

我从网上检查过我们可以编写HQL,现在的问题是如何执行这个HQL ...

string hql = "From DevelopmentSteps d inner join table2 t2 d.id=t2.Id where d.id=IDValue";

我需要添加哪些额外的类或其他东西来执行这种HQL?

请帮助我----谢谢

1 个答案:

答案 0 :(得分:1)

  • 要编写动态查询,我建议使用Criteria API。这是动态的,因为您有几个不同类型的单个查询,并且您还想动态设置排序。
  • 查询始终是面向对象的。您不需要通过外键加入,只需浏览类模型即可。查询中也没有“表”,但实体。
  • 应始终使用session.Get(或session.Load)按ID获取(单个)实例。只有这样NHibernate才能直接从缓存中获取它而不需要数据库往返,它已经被加载了。

例如:

public IList<T> GetAll<T>(string orderBy)
{
    return session.CreateCriteria(typeof(T))
      .AddOrder(Order.Asc(orderBy))
      .List<T>();
}