2010-01-15 8 views
8

Ich brauche Hilfe mit eifrigen Laden mit Linq in NHibernate 3 Kofferraum-Version.Eager Last bei der Verwendung von Linq in NHibernate 3

Ich habe eine viele-zu-viele-Beziehung wie folgt aus: Jetzt

public class Post 
{ 
    public int Id {get;set;} 
    public IList<Tag> Tags { get;set;} 
    . 
    . 
    . 
} 

Jetzt habe ich die folgende Abbildung in Fluent NHibernate

public class PostMap:ClassMap<Post> 
{ 
    public PostMap() 
    { 
     Table("Posts"); 
     Id(x => x.Id); 
     . 
     . 
     HasManyToMany(x => x.Tags) 
      .Table("PostsTags") 
      .ParentKeyColumn("PostId") 
      .ChildKeyColumn("TagId") 
      .Not.LazyLoad(); // this is not working.. 
    } 
} 

während die Beiträge zu holen, muss ich die Stichworte auch zur eifrigen Ladung. Ich weiß, dass es mit Criteria API und HQL möglich ist und der SetFetchMode ist, was ich verwenden soll. Aber gibt es eine Möglichkeit, SetFetchMode zu verwenden, wenn Sie Linq verwenden?

Antwort

13

Unterstützung für diese ging in den Kofferraum vor einiger Zeit; die Syntax ist so etwas wie

var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags); 

, wenn Stichworte wiederum eine andere Beziehung hatte, die Sie tun können:

var query = session.Query<Post>().Where(bla bla).Fetch(p => p.Tags).ThenFetch(t => t.SomethingElse); 
+3

holen muss nach dem Wo platziert werden oder eine Ausnahme erhalten. –

+0

@Nicolas Cadilhac, @Steve Strong - wie fügst du ein Where nach einem ThenFetch hinzu ?? Nicolas Antwort sagt das oben funktioniert nicht, aber es ist die akzeptierte Antwort, so bin ich verwirrt – leora

+0

@Nicolas Cadilhac, @Steve Strong - Wenn ich dies ausführen, bekomme ich "nicht unterstützte Ausnahme" – leora

Verwandte Themen