Nhibernate 对Castle Activerecord中的Count和Findall使用DetachedCriteria时出错

Nhibernate 对Castle Activerecord中的Count和Findall使用DetachedCriteria时出错,nhibernate,count,castle-activerecord,detachedcriteria,findall,Nhibernate,Count,Castle Activerecord,Detachedcriteria,Findall,伙计们 我有这个问题,我几乎到处搜索(也许我不知道它的正确关键字。)我需要你的帮助 这种关系非常简单,我有两个Activerecord域:团队和用户,它们彼此之间有HASANDBELONGMATONY关系 我现在的要求是查询Team.Id=4的用户数量,并查询Team.Id=4的用户列表。所以我在做一些类似的事情: DetachedCriteria c = DetachedCriteria.For<Models.User>() .AddOrder(Order.

伙计们

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

这种关系非常简单,我有两个Activerecord域:团队和用户,它们彼此之间有HASANDBELONGMATONY关系

我现在的要求是查询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); 
如果我单独使用它们。他们都是对的。但是当我一个接一个地使用它们的时候。例外情况来了。这就好像DetachedCriteria不能在两个查询中紧密使用一样。为什么呢

正确的方法是什么


需要你的帮助

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

var clonedcrit = NHibernate.CriteriaTransformer.Clone(c)

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

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);
DetachedCriteria c=DetachedCriteria.For().AddOrder(Order.Desc(“RegisterTime”).CreateAlias(“团队”、“团队”).Add(Expression.Eq(“Teams.Id”,4));
int count=ActiveRecordMediator.count(NHibernate.CriteriaTransformer.TransformToRowCount(c));
IList users=Models.User.FindAll(c);
我回答了我自己的问题,只是想把这个方法放在这里,我不确定这是否是最好的答案


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

我在这里看到类似的内容:,在这篇文章中,Roy使用了CountQuery,它看起来很不错,在调用SlicedFindAll()之前调用了dc.SetProjection(null)。我试过罗伊的方法,但失败了。我只是试过你的解决方案。对第二次调用使用clonedcrit,它也失败了..为什么…?@larryzhao在调用计数之前你克隆了它吗?我又尝试了一次。它起作用了。也许一开始我把事情搞砸了。这很好。
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);