Avec impatience de récupérer de collecte multiples propriétés (à l'aide de QueryOver/Linq)?
J'ai trouvé 2 questions similaires:
- Plusieurs Extractions dans linq to nhibernate
- Est-ce la bonne façon d'utiliser ThenFetch() pour charger plusieurs collections?
Selon cette page:
Être prudent de ne pas chercher avec impatience
plusieurs propriétés de collection à l'
même temps. Bien que cette déclaration
sera beau travail:var employees = session.Query<Employee>() .Fetch(e => e.Subordinates) .Fetch(e => e.Orders).ToList();
Il exécute un produit Cartésien de requête
sur la base de données, de sorte que le total
nombre de lignes retournées sera le
total Subordonnés fois au total
les ordres.
Permet de dire que j'ai le modèle suivant:
public class Person
{
public virtual int Id { get; private set; }
public virtual ICollection<Book> Books { get; set; }
public virtual ICollection<Article> Articles { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
Quelle est la manière la plus simple avec impatience charge de toutes les personnes avec leurs Livres, d'Articles et d'Adresses à l'aide de QueryOver/Linq (sans retour d'un produit Cartésien)?
Grâce
Mise à jour:
Voir cremor's réponse ci-dessous et Florian Lim's réponse dans ce fil. Le code suivant fonctionne très bien, seulement un aller-retour à la base de données.
var persons = session.QueryOver<Person>()
.Future<Person>();
var persons2 = session.QueryOver<Person>()
.Fetch(x => x.Books).Eager
.Future<Person>();
var persons3 = session.QueryOver<Person>()
.Fetch(x => x.Articles).Eager
.Future<Person>();
var persons4 = session.QueryOver<Person>()
.Fetch(x => x.Addresses).Eager
.Future<Person>();
Vous devez vous connecter pour publier un commentaire.
Je préfère utiliser linq fournisseur si possible, surtout si vous utilisez des versions plus récentes de nhibernate (>= 4.0). Tant que vous avez vos collections mappés sur les ISets (nécessite .net framework >= 4), qui nous convertis tels que nous pourrions faire, désireux de chargement et d'éviter les produits cartésiens. Je sens que ce n'est pas quelque chose qui est fortement annoncés, mais je préfère cette méthode, le cas échéant sur quoi que ce soit d'autre :
Si vous avez vos collections défini comme ci-dessus, alors vous pouvez faire ce qui suit et toujours éviter de produit cartésien des questions: