2010-01-15 12 views
8

Ho bisogno di aiuto con il caricamento avido con Linq nella versione tronco NHibernate 3.Eager carico durante l'utilizzo di Linq in NHibernate 3

Ho un molti-a-molti in questo modo:

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

Ora ho il seguente mappatura 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.. 
    } 
} 

Ora durante il recupero i post, ho bisogno anche del Tag a carico impaziente. So che è possibile con Criteria API e HQL e SetFetchMode è quello che dovrei usare. Ma c'è modo di usare SetFetchMode quando si usa Linq?

risposta

13

Il supporto per questo è andato nel bagagliaio qualche tempo fa; la sintassi è qualcosa di simile

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

Se Tag a sua volta ha avuto un altro rapporto, si può fare:

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

Fetch deve essere posto dopo Dove o si otterrà un'eccezione. –

+0

@Nicolas Cadilhac, @Steve Strong - come si aggiunge un dove dopo un ThenFetch ?? La risposta di Nicolas dice che quanto sopra non funziona ma è la risposta accettata quindi sono confuso – leora

+0

@Nicolas Cadilhac, @Steve Strong - Quando eseguo questo, ottengo "Eccezione non supportata" – leora

Problemi correlati