NHibernate Future Object Grafica muchas consultas

Dado un gráfico de objects de múltiples niveles que se llama usando Future como:

var Dads = db.Session.Query<Parent>().Where(P => P.EntityKey == Id) .ToFuture<Parent>(); var Kids = db.Session.Query<Kid>().Where(K => K.Parent.EntityKey == Id) .ToFuture<Kid>(); 

cuando llamo var Dad = dads.ToList () Veo el lote ir a través del cable y mostrar en el generador de perfiles.

El problema es cuando se enumera la colección, todavía se están enviando consultas desactualizadas a la database.

P.ej.

 for each (Kid kid in Dad.Kids) // This seems to hit the database { Teach(kid); } 

Envía una consulta SQL y acierta en la database para get a cada niño. ¿Por qué el gráfico de object no está poblado? o es este comportamiento esperado?

Ese comportamiento es de esperar. Simplemente le está diciendo a NHibernate que obtenga dos collections de la database en un lote, que está haciendo como se le dijo. Sin embargo, no estás diciendo que están relacionados. NH Queries with Futures no agrupa a las entidades después de ejecutarlas a less que se les indique que lo hagan con una unión.

Si ejecutó las consultas por separado sin Futures, no esperaría que la entidad matriz repentinamente tenga la colección de hijos completa. Básicamente, los futuros le permiten ejecutar las cosas en una ida y vuelta. Si las consultas tienen una raíz común con varias collections secundarias (por ejemplo, para evitar un producto cartesiano), NH puede "combinar" varias collections en una sola entidad.

Lamentablemente, la ToFuture() con el NH LINQ Api y el método ToFuture() parece plantear un problema en la implementación actual (NH 3.0 o 3.1). Es posible que necesite usar QueryOver Api en ese caso.

En una nota lateral, creo que el nombre del método no es apropiado.

Editar: después de la edición de la pregunta, el nombre del método ahora está bien.

Intereting Posts