Recuperando recogida niño objeto y en NHibernate usando LINQ
-
05-09-2019 - |
Pregunta
Tengo un problema al utilizar LINQ to NHibernate para cargar un objeto y con entusiasmo cargar una colección infantil. Los objetos se ven así:
public class Order
{
public Guid Id {get; set; }
public IList<OrderLine> OrderLines {get;set;}
}
public class OrderLine
{
public Guid Id {get;set;}
public string Item {get;set;}
}
Estoy tratando de cargar un pedido con un ID específico y (ansiosamente) todos es OrderLines niño utilizando LINQ. Mi consulta es el siguiente:
using (var s = _sessionFactory.OpenSession())
using (var tx = s.BeginTransaction())
{
var order = from o in s.Linq<Order>().Expand("OrderLines")
where o.Id == id
select o;
return order.First();
}
Sin embargo, cuando puedo mostrar la orden, la propiedad OrderLines
sólo contiene un objeto - la base de datos sin duda tiene 3. Curiosamente, si hago un foreach alrededor order
antes del regreso me pongo todos los artículos 3 niños - pero esto golpea en la base de datos dos veces.
He intentado modificar la consulta para utilizar Single()
lugar, pero que no funciona bien.
¿Estoy haciendo algo mal con LINQ? O es mi uso de Expand
incorrecto?
Gracias de antemano, España Simon.
Nota:. Estoy usando FluentNHibernate Automapping para crear mi Mapeo NH, y mi base de datos es una base de datos SQLite (un archivo, no en la memoria)
Solución
Parece que esta función tiene un error:
FirstOrDefault () = rompe fetchType unirse con LINQ to NHibernate
Tome un vistazo a la consulta de base de datos generada, si tiene cláusula TOP 1, esto puede ser el problema.
Recuerde que LINQ to NHibernate está todavía lejos de producción listo, por lo que puede ocurrir este tipo de errores.