我有一个关于Criteria方法的问题,与数据库的一对多关系,'one'是“帐户”,'many'是“ sites ” ,当我使用CreateCriteria()
时,某些事情是不对的。
像这样:SessionFactory.OpenSession().CreateCriteria(typeof(Account)).List().Count();
在运行之前,我认为SQL应该是SELECT COUNT(*) FROM table
,但SQL是SELECT id, siteurl...FROM table
。那有什么不对呢?我该如何解决?
First()
方法应该是SELECT TOP1 ...FROM table
,但它是SELECT ...FROM table
我是Nhiberate的新秀,请帮助我。
答案 0 :(得分:12)
这是因为在查询运行之后以及在数据库之外执行最后调用的Count
方法。您只计算内存中列表中的元素。要实现您的目标,您可以使用投影:
var count = session
.CreateCriteria<Account>()
.SetProjection(
Projections.Count(Projections.Id())
)
.UniqueResult<long>();