此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>
。
答案 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功能的代码?