2010-01-15 3 views
8

Мне нужна помощь с активной загрузкой с Linq в версии NHibernate 3 trunk.Яркая нагрузка при использовании Linq в NHibernate 3

У меня есть много-ко-многим, как это:

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

Теперь я следующее отображение в 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.. 
    } 
} 

Теперь при выборке постов, мне нужны теги также к нетерпеливой нагрузке. Я знаю, что это возможно с помощью API критериев и HQL, и SetFetchMode - это то, что я должен использовать. Но есть ли способ использовать SetFetchMode при использовании Linq?

ответ

13

Поддержка этого в тупик когда-то была; синтаксис быть что-то вроде

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

Если Теги в свою очередь, были другие отношения, вы можете сделать:

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

Fetch должны быть помещены после Где или вы получите исключение. –

+0

@Nicolas Cadilhac, @Steve Strong - как вы добавляете, где после ThenFetch ?? Ответ Николя говорит, что вышеупомянутое не работает, но его принятый ответ, поэтому я смущен – leora

+0

@Nicolas Cadilhac, @Steve Strong - Когда я запускаю это, я получаю «notsupported Exception» – leora

Смежные вопросы