2012-01-11 66 views
6

Tôi đang cố gắng sử dụng tiêu chí Api trên nhiều bảng với tải mong muốn.Tìm nạp bằng API tiêu chuẩn nhibernate

Đối tượng rút gọn của tôi trông như thế này:

class Limit 
{ 
    Risk {get; set;} 
} 

class Risk 
{ 
    List<Company> Companies { get;set;} 
} 

class Company 
{ 
    List<Address> OldAdresses {get;set;} 
} 

class Address 
{ 
    string Street { get;set;} 
} 

gọi Tiêu chuẩn của tôi trông như thế này:

var CriterionGruppe = Expression.Eq("Account.Id", someGuid); 

var temp = _transaktion.Session.CreateCriteria(typeof(Limit)) 
.SetFetchMode("Risk", FetchMode.Eager) 
.SetFetchMode("Risk.Companies", FetchMode.Eager) 
.Add(CriterionGruppe) 
.SetResultTransformer(new DistinctRootEntityResultTransformer()) 
.List<Limit>(); 

Các địa chỉ vẫn được nạp với nhiều Selects. Làm thế nào tôi có thể bao gồm các địa chỉ cũ của một Công ty trong cuộc gọi tiêu chí của tôi.

Tôi đã đọc một mục blog trong blog của ayende và một số câu hỏi khác ở đây tại stackoverflow. Nhưng vẫn không có may mắn.

Tôi hy vọng ai đó có thể chỉ cho tôi đúng hướng.

Cảm ơn trước peter

When must we use eager loading in NHibernate? What is it's usage?

NHibernate Eager Fetching Over Multiple Levels

Ayende Blog

Trả lời

8
var account = _transaktion.Session.Load<Account>(someGuid); 
var temp = _transaktion.Session.CreateCriteria(typeof(Limit)) 
    .SetFetchMode("Risk", FetchMode.Eager) 
    .SetFetchMode("Risk.Companies", FetchMode.Eager) 
    .SetFetchMode("Company.OldAddresses", FetchMode.Eager) 
    .Add(Expression.Eq("Account", account)) 
    .SetResultTransformer(new DistinctRootEntityResultTransformer()) 
    .List<Limit>(); 

Tuy nhiên điều này là rất không hiệu quả. Bạn đang tải một lượng lớn dữ liệu trùng lặp để thực hiện truy vấn 1 sql. Một cách tiếp cận tốt hơn sẽ là

  1. tải một chiếu về những gì đang thực sự cần thiết
  2. Futures sử dụng và batched tải lười biếng để tránh một kết quả Descartes đơn thiết lập và chọn n + 1.
+0

Cảm ơn bạn. Đó là những gợi ý tôi đã hy vọng. Tôi biết rằng nó không hiệu quả như cách tôi truy vấn. – user631833

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