NHibernate: kann nicht erfolgreich geladen werden

8

Ich benutze NH 3.0 und FNH 1.1 mit NH3 neu kompiliert.

Ich habe ein Benutzermodell, bei dem ich das Profil immer laden möchte, wenn ich es lade. 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 ).

In der UserMap stelle ich ein:

%Vor%

Aber das Einstellen von 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 Benutzer-Entität angefordert wird. Linq sollte die Zuordnung beachten, nicht?

    
Nicolas Cadilhac 07.12.2010, 18:39
quelle

1 Antwort

3

Ich habe dieses Problem auch, und leider denke ich, 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. Zum Beispiel, wenn Sie

getan haben
  

session.CreateQuery ("aus dem Profil"). List ()

Sie würden nur eine Liste aller Profile erhalten und Ihre Benutzerklasse würde nicht mitmachen, selbst wenn Ihr Mapping outer-join = true hat.

Wenn Sie den alten NHibernate.Linq-Provider verwendet haben, der die Critera-API oder die Criteria-API direkt verwendet hat:

  

session.CreateCriteria (). List ()

Sie erhalten eine Liste aller Profile, die mit den Benutzern verbunden sind, genauso wie Ihre Mapping-Datei angefordert wurde.

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

>     
Scott Kirkland 09.12.2010 00:34
quelle