Récupération objet et collection des enfants à l'aide NHibernate Linq
-
05-09-2019 - |
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)
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.