【问题标题】:Error when using DetachedCriteria for both Count and Findall in Castle Activerecord对 Castle Activerecord 中的 Count 和 Findall 使用 DetachedCriteria 时出错
【发布时间】:2011-07-18 15:08:49
【问题描述】:

伙计们,

我几乎到处都在搜索过这个问题(也许我不知道正确的关键字。)我需要你的帮助!

关系很简单,我有两个Activerecord Domain:Team和User,它们之间有HasAndBelongsToMany关系。

我现在的要求是查询 Team.Id = 4 的用户数并查询 Team.Id = 4 的用户列表。所以我正在做类似的事情:

DetachedCriteria c = DetachedCriteria.For<Models.User>()
            .AddOrder(Order.Desc("RegisterTime"))
            .CreateAlias("Teams", "teams")
            .Add(Expression.Eq("teams.Id", 4));

int count = ActiveRecordMediator<Models.User>.Count(c);
IList<Models.User> users = Models.User.FindAll(c); 

计数被正确检索,但对于列表查询,我得到异常:

Exception Details: System.InvalidCastException: At least one element in the source array could not be cast down to the destination array type.

如果我单独使用它们。他们都是正确的。但是当我一个接一个地使用它们时。例外来了。这就像 DetachedCriteria 不应在两个查询中紧密使用。这是为什么呢?

正确的做法是什么?

需要你的帮助!

【问题讨论】:

    标签: nhibernate count castle-activerecord detachedcriteria findall


    【解决方案1】:

    我找到了一种方法,虽然我仍然不清楚根本原因,但是编写如下代码使其正确并且看起来不错:

    DetachedCriteria c = DetachedCriteria.For<Models.User>().AddOrder(Order.Desc("RegisterTime")).CreateAlias("Teams", "teams").Add(Expression.Eq("teams.Id", 4));
    int count = ActiveRecordMediator<Models.User>.Count(NHibernate.CriteriaTransformer.TransformToRowCount(c));
    IList<Models.User> users = Models.User.FindAll(c);
    

    我回答了我自己的问题只是为了把这种方法放在这里,我不确定这是否是最好的答案。

    我渴望听到更多关于这方面的信息!

    【讨论】:

      【解决方案2】:

      我的赌注是ActiveRecordMediator&lt;Models.User&gt;.Count(c); 使用投影更改标准,这将导致第二次调用中的异常。您可以通过克隆每个查询的条件来解决此问题。

      var clonedcrit = NHibernate.CriteriaTransformer.Clone(c)
      

      【讨论】:

      • 我在这里看到类似这样的内容:roytate.blogspot.com/2007/03/castle-activerecord-with.html,在这篇文章中,Roy 使用了 CountQuery,它看起来相当不错,并在调用 SlicedFindAll() 之前调用了 dc.SetProjection(null)。我尝试了 Roy 的方法,但失败了。
      • 我刚刚尝试了您的解决方案。使用 clonedcrit 进行第二次调用,它失败了,要么……为什么……?
      • @larryzhao 你在调用计数之前克隆了它吗?
      • 我又试了一次。有用。也许我一开始搞砸了。这很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多