2010-01-15 23 views
8

J'ai besoin d'aide pour charger avec Linq dans NHibernate 3 version de coffre.Mise en charge fastidieuse lors de l'utilisation de Linq dans NHibernate 3

J'ai plusieurs à-plusieurs comme ceci:

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

Maintenant, j'ai le mappage suivant dans 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.. 
    } 
} 

maintenant en allant chercher les messages, j'ai besoin Balises aussi à la charge impatiente. Je sais que c'est possible avec Criteria API et HQL et que SetFetchMode est ce que je devrais utiliser. Mais est-il possible d'utiliser SetFetchMode lors de l'utilisation de Linq?

Répondre

13

La prise en charge de ce problème est entrée dans le coffre il y a quelque temps; la syntaxe est être quelque chose comme

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

Si tags à son tour avait une autre relation, vous pouvez faire:

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

Fetch doit être placé après Où ou vous obtiendrez une exception. –

+0

@Nicolas Cadilhac, @Steve Strong - comment ajouter un où après un ThenFetch ?? Réponse de Nicolas dit que ce qui précède ne fonctionne pas mais c'est la réponse acceptée, donc je suis confus – leora

+0

@Nicolas Cadilhac, @Steve Strong - Quand je cours cela, je reçois "Exception non pris en charge" – leora