2010-01-15 14 views
8

Tôi cần trợ giúp với tải mong muốn với LINQ trong phiên bản 3 thân cây NHibernate.Tải bằng máy nhắn tin trong khi sử dụng LINQ trong NHibernate 3

Tôi có một mối quan hệ nhiều-nhiều như thế này:

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

Bây giờ tôi đã lập bản đồ sau đây trong thành thạo 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.. 
    } 
} 

Bây giờ khi lấy các bài viết, tôi cần sự Tags cũng để háo hức tải. Tôi biết rằng có thể với Criteria API và HQL và SetFetchMode là những gì tôi nên sử dụng. Nhưng có cách nào để sử dụng SetFetchMode khi sử dụng LINQ?

Trả lời

13

Hỗ trợ cho điều này đã đi vào thân cây đôi khi trước đây; cú pháp là có cái gì đó như

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

Nếu Thẻ lần lượt đã có mối quan hệ khác, bạn có thể làm:

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

Fetch phải được đặt sau ở đâu hoặc bạn sẽ nhận được một ngoại lệ. –

+0

@Nicolas Cadilhac, @Steve Strong - làm thế nào để bạn thêm một nơi sau khi một ThenFetch ?? Phản ứng của Nicolas nói rằng những điều trên không hiệu quả nhưng câu trả lời được chấp nhận của nó nên tôi bị nhầm lẫn – leora

+0

@Nicolas Cadilhac, @Steve Strong - Khi tôi chạy điều này, tôi nhận được "Ngoại lệ không được hỗ trợ" – leora