asp.net-mvc-2 – 在选择聚合时,如何处理Linq到NHibernate的Fetch异常?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-2 – 在选择聚合时,如何处理Linq到NHibernate的Fetch异常?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在asp.net mvc Grid(具体是telerik)上使用LINQ到NHibernate的IQueryable实现,我知道我需要为这个特定的网格急切地获取一些东西.

所以我的查询看起来像这样:

var query =  from s in repository.Query<MyClass>()
                     orderby s.Property.Name,s.Name
                     select s;

query = query.Fetch(x => x.Property);

现在,如果我执行query.ToList(),一切都很好,我可以验证它在集成测试中是否有效.

这很棒.

但是,如果我执行query.Count()或其他聚合查询的东西,我会得到一个异常:

Query specified join fetching,but the
owner of the fetched association was
not present in the select list
[FromElement{explicit,not a collection
join,fetch join,fetch non-lazy
properties,classAlias=0,role=,tableName=[Property],tableAlias=property1,origin=MyClass
myclass0_,colums={myclass0_.PropertyGuid
,className=Property}}]
[.Count(.Fetch(.ThenBy(.OrderBy(NHibernate.Linq.NhQueryable`1[MyClass],
Quote((s,) => (s.Property.Name)),),) => (s.Name)),Quote((x,
) => (x.Property)),)]

我知道它试图告诉我,我不能急于获取Property,因为MyClass不在select中,但问题是Count()实际上是通过Grid调用的,并且从我的代码外部处理.

我应该做的就是给网格一个IQueryable,它应该能够自己处理分页,排序等.

还有其他人不得不用NHibernate Fetching解决这个问题,你是如何解决它的?

解决方法

var query =  from s in repository.Query<MyClass>()
                     orderby s.Property.Name,s.Name
                     select s;
query = query.Fetch(x => x.Property).ToList();

然后你可以去做

query.Count()

它应该处于正常运行状态.

至于为什么我怀疑这是可以做的事情

AsEnumerable()

要么

AsQueryable()

但不知道为什么会这样我有类似的问题,这解决了它……

原文链接:https://www.f2er.com/aspnet/247195.html

猜你在找的asp.Net相关文章