Как вы справляетесь с исключением Linq to NHibernate для Fetch при выборе агрегатов? - PullRequest
7 голосов
/ 09 марта 2011

Я использую LINQ для реализации IQueryable от NHibernate на сетке mvc asp.net (особенно для telerik), где я знаю, что мне нужно будет с нетерпением получить что-то для этой конкретной сетки.

Итак, у меня есть запрос, который выглядит примерно так:

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 () или что-то еще, объединяющее запрос, я получу исключение:

Запрос, указанный соединением выборки, но владелец полученной ассоциации был отсутствует в списке выбора [FromElement {явный, не коллекция присоединиться, получить присоединиться, получить ленивый свойства, classAlias ​​= 0, роль =, TABLENAME = [Свойства], tableAlias ​​= property1 , происхождение = MyClass myclass0_, colums = {myclass0_.PropertyGuid , Имя класса = Свойство}}] [.Count (.Fetch (.ThenBy (.OrderBy (NHibernate.Linq.NhQueryable`1 [МойКласс], Цитата ((s,) => (s.Property.Name)),), Цитировать ((s,) => (s.Name)),), Цитировать ((x, ) => (x.Property)),),)]

Я знаю, что он пытается сказать мне, что я не могу охотно извлекать Property, потому что MyClass не находится в select, но проблема в том, что Count () фактически вызывается через Grid и обрабатывается извне из моего кода .

Все, что мне нужно сделать, это дать сетке IQueryable, и он должен уметь обрабатывать страницы, сортировку и т. Д. Сам по себе.

Кто-нибудь еще должен был обойти эту проблему с помощью NHibernate Fetching и как вы ее решили?

1 Ответ

0 голосов
/ 04 июля 2011
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 ()

но не уверен, почему у меня было подобноепроблема, и это решило ее ...

...