2011-03-09 3 views
7

Estoy usando LINQ para la implementación IQueryable de NHibernate en una cuadrícula de asp.net mvc (específicamente telerik), donde sé que tendré que buscar algo con entusiasmo para esta cuadrícula en particular.¿Cómo lidiar con Linq a la excepción de búsqueda de NHibernate al seleccionar agregados?

Así que tienen consulta que se ve algo como esto:

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

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

Ahora, si ejecuto query.ToList(), todo está bien, y puedo comprobar que funciona en una prueba de integración.

Es increíble.

Sin embargo, si ejecuto query.Count() o alguna otra cosa que agrega la consulta, me sale una excepción:

consulta especificada recuperación por unión, pero el propietario de la asociación inverosímil era no está presente en la lista de selección [FromElement {explícita, no una colección unen, ir a buscar unirse, ir a buscar no perezoso propiedades, classAlias ​​= 0, role =, nombreTabla = [propiedad], tableAlias ​​= propiedad1, origen = MiClase myclass0_ , colums = {myclass0_.PropertyGuid , claseNa me = Property}}] [.Count (.Fetch (.ThenBy (.OrderBy (NHibernate.Linq.NhQueryable`1 [MyClass], Cita ((s,) => (s.Property.Name)),) , Cita ((s) => (s.Name)),), Cita ((x, ) => (x.Property)),),)]

sé que está tratando para decirme que no puedo buscar con impaciencia Propiedad porque MyClass no está en la selección, pero el problema es que Count() se está llamando realmente a través de la cuadrícula y se maneja externamente desde mi código.

Todo lo que se supone que debo hacer es darle a la grilla un IQueryable y debería ser capaz de manejar paginación, clasificación, etc. por sí mismo.

¿Alguien más tuvo que solucionar este problema con NHibernate Fetching y cómo lo resolvió?

Respuesta

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

y después se puede ir y hacer

query.Count() 

y debe estar en buenas condiciones.

cuanto a por qué es que yo sospecho que es algo que ver

AsEnumerable()

o

AsQueryable()

pero no está seguro ¿Por qué esto es tuve p similar roblem y esto lo resolvió ...

+0

El problema con ese enfoque es que traerá literalmente todo en esa consulta. Más adelante, la cuadrícula busca activamente esa consulta, así que solo voy a la base de datos y obtengo una página a la vez.Pero la cuadrícula también necesita un recuento total para manejar la paginación correctamente. Esta consulta en mi pregunta es la consulta "base" de la que está funcionando la grilla. – Joseph

+0

Tengo el mismo problema y esta solución no ayuda ya que tengo el mismo problema de rendimiento. – nfplee

+0

@Joseph: ¿cómo se configura su mapeo? ¿Qué hay de set carga ansiosa allí? – cpoDesign

Cuestiones relacionadas