你如何使用分离的QueryOver实例?

时间:2011-09-08 19:09:38

标签: nhibernate queryover

NHibernate blog entry说明了如何创建分离的QueryOver查询(类似于DetachedCriteria)(使用QueryOver.Of<T>())。但是,看一遍,它看起来与我不相似。

使用DetachedCriteria,我会创建我的实例并根据需要进行设置,然后调用GetExecutableCriteria()然后分配会话并执行查询。使用“分离的”QueryOver,大多数API都不可用(即添加限制,连接,排序等等),直到我调用GetExecutableQueryOver,这需要ISession }或IStatelessSession,此时您不再断开连接。

如何使用分离的QueryOver实例?

编辑:

实际问题与我如何存储分离的QueryOver实例有关:

public class CriteriaQuery<T>
{
    internal protected QueryOver<T> _QueryOver { get; set; }

    public CriteriaQuery()
    {
        _QueryOver = QueryOver.Of<T>();
    }

    // Snip
}

它应该是QueryOver<T, T>

1 个答案:

答案 0 :(得分:13)

我正在使用NHibernate 3.1.0.4000。以下代码成功编译:

Employee salesRepAlias = null;

var query = QueryOver.Of<Customer>()
    .JoinAlias(x => x.SalesRep, () => salesRepAlias)
    .Where(x => x.LastName == "Smith")
    .Where(() => salesRepAlias.Office.Id == 23)
    .OrderBy(x => x.LastName).Asc
    .ThenBy(x => x.FirstName).Asc;

return query.GetExecutableQueryOver(session)
    .List();

这说明了对分离的QueryOver使用限制,连接和排序,就像使用常规QueryOver一样。

您能否发布演示不可用的API功能的代码?