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)

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top