【问题标题】:NHibernate session.Query<ISomeInterface>().Count returns wrong countNHibernate session.Query<ISomeInterface>().Count 返回错误计数
【发布时间】:2013-03-12 10:42:03
【问题描述】:

我遇到了通过接口获取正确数量的对象的问题:

var count = session.Query<IDirty>().Count();

有 2 个类实现了 IDirty 接口。 Count 返回一个类的对象数,忽略第二个。

QueryOver 只是抛出该项目不是唯一的异常。

var count2 = session.QueryOver<IDirty>().RowCount();

它在内部使用 SingleOrDefault 方法,是什么解释了它失败的原因......

获取项目列表工作正常 - 列表包括两种类型的对象:

var list= session.Query<IDirty>().ToList();

是否有任何解决方法可以在不枚举所有项目的情况下获得正确的计数?

【问题讨论】:

  • 在 QueryOver 场景中,如果您在单个属性(id?)上投影并对其执行计数,它会改变什么吗?

标签: c# .net nhibernate


【解决方案1】:

试试

session.QueryOver<IDirty>().ToRowCountQuery().List<int>().Sum()

【讨论】:

  • var count = session.QueryOver().ToRowCountQuery().List().Sum();工作!
【解决方案2】:

在我看来,这是一个错误,尽管我明白为什么修复它并非易事。

您可以在https://nhibernate.jira.com 上打开一个问题。同时,只需对实现IDirty.的每种类型使用单独的查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多