【问题标题】:Nhibernate -- Excuting some simple HQLNhibernate -- 执行一些简单的 HQL
【发布时间】:2010-04-16 13:54:55
【问题描述】:

我已经映射了 .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?

请帮帮我----谢谢

【问题讨论】:

标签: asp.net nhibernate fluent-nhibernate hql


【解决方案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>();
}

【讨论】:

  • Criteria API,这是我必须添加的 .dll 吗?这里有什么会话需要通过这里?
  • 条件包含在 Nhibernate.dll 中。看看手册。 nhforge.org/doc/nh/en/index.html#manipulatingdata-criteria
  • 你为我提供了很好的链接,我遇到了问题,如何创建会话对象来获取 CreateCriteria 方法。我无法上我的课,你能告诉我该怎么做才能获得 session.CreateCriteria().......谢谢
  • 你能看看这个问题stackoverflow.com/questions/2681078/…
猜你喜欢
  • 1970-01-01
  • 2018-04-16
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多