我有一个关于Criteria方法的问题,与数据库的一对多关系,'one'是" account ",'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新秀,请帮助我.
Dar*_*rov 12
发生这种情况是因为最后Count调用的方法在查询运行之后和数据库之外执行.您只计算内存中列表中的元素.要实现您所寻找的目标,您可以使用投影:
var count = session
.CreateCriteria<Account>()
.SetProjection(
Projections.Count(Projections.Id())
)
.UniqueResult<long>();
Run Code Online (Sandbox Code Playgroud)