J'ai un problème avec Linq à NHibernate pour charger un objet et charger avec impatience une collection enfant. Les objets ressemblent à ceci:Récupération d'un objet et d'une collection enfant dans NHibernate en utilisant Linq
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) l'ensemble de ses OrderLines enfants 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, lorsque je visualise 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 3 éléments enfants - mais cela frappe deux fois la base de données.
J'ai essayé de modifier la requête pour utiliser Single()
à la place, mais cela ne fonctionne pas non plus.
Est-ce que je fais quelque chose de mal avec linq? Ou est-ce que mon utilisation de Expand
est incorrecte? Merci d'avance,
Simon.
Remarque: J'utilise FluentNHibernate Automapping pour créer ma NH Mapping, et ma base de données est une base de données Sqlite (un fichier, pas en mémoire).
Merci, je pensais que c'était peut-être un bug, mais je voulais vérifier que j'utilisais la bonne méthode Linq. En utilisant NHProf, je peux voir que la requête a une clause 'limit 1' (équivalent sqlite de' top 1'). J'ai changé mon code pour être: return order.ToList() [0]; et cela fonctionne comme prévu. Merci. – Simon