【问题标题】:NHibernate use Criteria for Count(),First()NHibernate 使用 Count(),First() 的标准
【发布时间】:2010-03-19 08:22:55
【问题描述】:

我有一个关于 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 菜鸟,请帮帮我。

【问题讨论】:

    标签: nhibernate criteria


    【解决方案1】:

    发生这种情况是因为您最后调用的Count 方法在查询运行后在数据库之外执行。您只计算内存中列表中的元素。要实现您正在寻找的内容,您可以使用投影:

    var count = session
        .CreateCriteria<Account>()
        .SetProjection(
            Projections.Count(Projections.Id())
        )
        .UniqueResult<long>();
    

    【讨论】:

    • 我必须总是在Count 方法中指定ant IProjection 吗?如果我不需要那里的任何属性怎么办,比如Count(*)
    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多