2010-12-29 9 views
1

ich migriert nur zu Nhibernate 3 und ein mit der LINQ-Syntax. Ich habe jetzt den folgenden Code:.Warum wird eine einzelne Verknüpfungsabfrage zweimal ausgeführt, wenn die LINQ-Syntax von nhibernate verwendet wird?

IEnumerable<Team> team = Session.Query<Team>().Fetch(r=>r.Country); 

so wird es eine Upfront beitreten tun (wie ich brauche dieses Kind für jeden Datensatz Objekte

Es läuft die Join-Abfrage, aber ich ziehe dies in der nhibernate oben Profiler und es stellt sich heraus, dass seine die Abfrage zweimal (gleiche genaue Abfrage) ausgeführt wird.

ist das ein Fehler in der neuen Version von nhibernate oder gibt es etwas, was ich falsch mache?

auch Anregungen für zusätzliche Möglichkeiten, dies zu debuggen, um zu verstehen warum das passiert.

Antwort

3

Es hat nichts mit Fetch oder Joins zu tun.

Sie weisen dem Team einen IQueryable zu. Jedes Mal, wenn Sie es aufzählen (iterieren, Anzahl abrufen usw.), führt es die Abfrage aus.

Um dies zu vermeiden, fügen Sie .ToList() an den Aufruf an, so dass es ausgeführt und in eine speicherinterne Liste konvertiert wird.

+0

danke. . funktioniert wie ein Charme – leora

+0

Es gibt einen Grund, warum nicht ein Tolist. Sie würden gerne vermeiden, Objekte recht zu laden. Laden Sie sie einfach, wenn Sie sie brauchen. – Baz1nga

Verwandte Themen