2010-12-07 19 views
8

Ich benutze NH 3.0 und FNH 1.1 mit NH3 neu kompiliert.NHibernate: kann nicht erfolgreich geladen werden

Ich habe ein Benutzermodell, wo ich immer sein Profil abrufen möchte, wenn es geladen wird. Ich benutze den linq-Provider von NH3, kann aber nicht die Fetch-Methode verwenden (wegen meines Repositorys, das NHibernate verbirgt und ein IQueryable zurückgibt und die Tatsache, dass ToPagedList für die Abfrage aufgerufen wird, wodurch ich Fetch als letzten Aufruf der Abfrage absetzen kann).

Im usermap I gesetzt:

HasOne(x => x.Profile) 
    .Not.LazyLoad() 
    .Cascade.All(); 

Aber LazyLoad auf OFF hilft nicht. Ich habe auch mit dem Fetch-Modus gespielt.

Meine Erwartung ist, dass ich, wenn ich diese Zuordnung definiere, Linq nicht einmal sagen muss, dass Profil abgerufen werden soll, wenn die Entität User angefordert wird. Linq sollte die Zuordnung beachten, nicht?

+1

hmmm ... ich dachte 1 zu 1 wäre immer eifrig geholt ... in der Tat erinnere ich mich daran, dass ich nicht in der Lage war, ein 1: 1 zu laden. Hat sich das mit NH3 geändert? – dotjoe

+0

Meine Referenz ist NH Profiler. Ich sehe 2 Anfragen, eine Auswahl für Benutzer und eine Auswahl für Profil. Ich muss zugeben, dass ich mir das bei der Verwendung von NH2 nicht angesehen habe. –

Antwort

3

Ich habe dieses Problem auch, und ich denke leider, dass es von Entwurf ist. Der NHibernate 3.0 Linq-Anbieter verwendet HQL unter dem Deckblatt, und HQL berücksichtigt Ihre Zuordnungen in dieser Hinsicht nicht. wenn Sie taten

session.createQuery („from Profil“). List() Zum Beispiel

Sie würden nur eine Liste aller Profile erhalten und Ihre Benutzerklasse würde nicht beitreten, auch wenn Ihr Zuordnung hat Outer-Join = True.

Wenn Sie die alte NHibernate.Linq Anbieter wurden mit, die die API verwendet Kriterium oder die Kriterien API direkt.

session.CreateCriteria() Liste()

Sie erhalten würden Zurück eine Liste aller Profile links außen mit den Benutzern verbunden, genau wie Ihre Mapping-Datei angefordert.

Jetzt weiß ich nicht, warum der HQL-unterstützte linq-Provider Ihre Zuordnungen nicht berücksichtigt (und wenn jemand einen Weg um diese, bitte posten), aber ich glaube, das ist, warum Sie dieses Verhalten sehen.

Verwandte Themen