Question

J'ai un problème à l'aide Linq à NHibernate pour charger un objet et charger avec impatience une collection des enfants. Les objets ressemblent à ceci:

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;}
}

Je suis en train de charger un ordre avec un identifiant spécifique et (avec impatience) tout cela est OrderLines enfant LINQ. Ma requête ressemble à ceci:

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();
}

Cependant, quand j'afficher l'ordre, la propriété OrderLines ne contient qu'un seul objet - la base de données a certainement 3. Bizarrement, si je fais un foreach autour order avant le retour, je reçois tous les articles 3 enfants - mais cela frappe la base de données deux fois.

J'ai essayé de modifier la requête d'utiliser à la place Single(), mais cela ne fonctionne pas non plus.

Est-ce que je fais quelque chose de mal avec LINQ? Ou est mon utilisation de Expand incorrect?

Merci à l'avance,
Simon.

Note:. J'utilise FluentNHibernate AutoMapping pour créer mon Mapping NH, et ma base de données est une base de données SQLite (un fichier, pas en mémoire)

Était-ce utile?

La solution

Il semble que cette fonctionnalité a un bug:

FirstOrDefault () brise FetchType = se joindre à LINQ to NHibernate

Jetez un oeil à la requête de base de données générée, si elle a TOP 1 clause, cela peut être le problème.

Rappelez-vous que Linq à NHibernate est encore loin d'être prêt pour la production, donc ce genre de bugs peut se produire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top