6

Foo có Tiêu đề.
Tham khảo thanh Foo. Tôi có một bộ sưu tập với Thanh.
Tôi cần một bộ sưu tập với Foo.Title.Chọn vấn đề n + 1

Nếu tôi có 10 thanh trong bộ sưu tập, tôi sẽ gọi db 10 lần.

bars.Select (x => x.Foo.Title)

Tại thời điểm này (sử dụng NHibernate LINQ và tôi không muốn thả nó) lấy bộ sưu tập Bar.

var q = from b in Session.Linq<Bar>() 
       where ... 
       select b; 

Tôi đọc những gì Ayende nói about this.
Một liên quan khác question.
Một chút documentation.
Và một liên quan khác blog post.
Có thể this có thể trợ giúp?
Điều gì về this?
Có lẽ MultiQuery là những gì tôi cần? :/

Nhưng tôi vẫn không thể 'biên dịch' điều này trong giải pháp thích hợp.

Làm thế nào để tránh chọn n + 1?

Trả lời

3

này đã không làm việc:

var q = from b in Session.Linq<Bar>().Expand("Foo.Title") 
       where ... 
       select b; 

Nhưng loại này giúp:

var q = from b in Session.Linq<Bar>().Expand("Foo") 
       where ... 
       select b; 

..nhưng bây giờ điều đó sẽ sử dụng kho lưu trữ không biết rằng nó được tải foos quá.
Bất kỳ ý tưởng nào làm cho nó rõ ràng hơn?

Một ý tưởng là thay đổi cách đặt tên thành FindBarsWithFoos().

Ít nhất nó hoạt động.

Các vấn đề liên quan