2009-05-06 28 views
44

Có cách nào để đặt hàm tìm nạp thành mong muốn cho nhiều hơn một đối tượng sử dụng LINQ cho nhibernate không. Dường như có một phương pháp mở rộng chỉ cho phép tôi đặt một đối tượng. Tuy nhiên tôi cần phải đặt nó cho nhiều hơn một đối tượng. Điều này có thể không? Cảm ơnLINQ cho NHibernate và nạp chế độ tải mong muốn

Trả lời

18

chỉ cần sử dụng nó nhiều hơn một lần.

IList<Entity> GetDataFromDatabase() 
{ 
    var query = session.Linq<Entity>(); 
    query.Expand("Property1"); 
    query.Expand("Property2"); 
    return query.ToList(); 
} 
+6

hoặc truy vấn.Expand ("Property1, Property2"); – Sprintstar

+2

Đó có phải là phương pháp mở rộng không? Không thể tìm thấy nó trong NHibernate.Linq v2.0.50727. –

+0

Ý tôi là, phiên bản 1.0.0.0 –

8

Theo tôi có thể thấy, điều này không tương đương: SetFetchMode hydrat một cây đối tượng và phương pháp Mở rộng truy xuất một sản phẩm Descartes.

102

Các nhà cung cấp LINQ mới làm cho nó một chút khác nhau:

var customers = session.Query<Customer>().Fetch(c => c.Orders).ToList(); 

More đây: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html

+0

nếu 'Đơn hàng' có một lớp con của riêng nó, nó sẽ tải háo hức? nếu không - làm cách nào bạn thay đổi truy vấn để tải nó? – ilans

+1

Để nhận các cháu: 'var customers = session.Query () .FetchMany (c => c.Orders) .ThenFetchMany (o => o.OrderLines) .ToList();' – ilans

0

Trong contiune để @Mike Hadlow câu trả lời, lấy cấp độ tiếp theo (cháu), bạn cần phải làm:

var customers = session.Query<Customer>() .FetchMany(c => c.Orders) .ThenFetchMany(o => o.OrderLines).ToList();

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