Mes cours ressemblent à ceci (je ne comprennent que les propriétés pertinentes):NHibernate: obtenir plusieurs entités avec un sous-ensemble de collection enfant?
public class Order
{
public virtual Customer Customer { get; set; }
public virtual IEnumerable<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
public virtual string Product { get; set; } // Simplified
}
Maintenant, je Ce que je veux est de créer un critère détaché qui sélectionne toutes les commandes pour un client donné, et en même récupère temps seulement les 10 premières lignes de commande pour chaque commande. La première partie est facile:
Customer someCustomerObject = ...;
var criteria = DetachedCriteria.For<Order>().Add(Restrictions.Eq("Customer", someCustomerObject);
Mais comment puis-je récupérer instruis NHibernate avec impatience les 10 premières lignes de commande pour chaque commande récupéré par les critères ci-dessus?
J'ai essayé d'utiliser un filtre basé sur l'exemple suivant (extrait de la documentation NHibernate):
session.CreateFilter(lazyCollection, "").SetFirstResult(0).SetMaxResults(10).List();
Mais quand je donne Order.OrderLines
la méthode CreateFilter
, il récupère toutes les lignes de commande d'abord, puis ensuite récupère les 10 premières lignes de commande, ce qui n'est pas ce que je veux. J'ai également essayé de combiner cela avec un appel à NHibernateUtil.Initialize
en vain. Comment puis-je créer un critère détaché pour ce problème? Ou, si ce n'est pas tout à fait possible, comment puis-je récupérer, pour chaque commande, les 10 premiers résultats, sans aller chercher la totalité de la collection?
Ce qui se passe si vous faites l'appel à setMaxResults sur les « critères » au lieu? –