2009-02-18 35 views
24

Tôi có một hệ thống phân cấp của các đối tượng, theo thứ tự, liên hệ, Địa chỉ:NHibernate Háo hức tải đa cấp đối tượng trẻ em

public class Order { 
    public virtual Contact BillingContact { get; set; } 
} 

public class Contact { 
    public virtual Address Address { get; set; } 
} 

tôi muốn truy vấn một trật tự bởi id, và tải háo hức các billingcontact, cùng với đó là địa chỉ .

var criteria = DetachedCriteria.For<Order>() 
    .SetFetchMode("BillingContact", FetchMode.Eager) 

Tiêu chí này háo hức tải BillingContact, nhưng dễ hiểu không phải địa chỉ của BillingContact. Nếu tôi thêm:

 .SetFetchMode("BillingContact.Address", FetchMode.Eager) 

Điều này không có gì để trợ giúp.

Cũng lưu ý rằng các mối quan hệ là một chiều:

public OrderMap() 
{ 
    References(x => x.BillingContact) 
     .Not.Nullable() 
     .Cascade.All(); 
} 

public ContactMap() 
{ 
    HasOne(x => x.Address) 
     .Cascade.All() 
     .FetchType.Join(); 
} 

public AddressMap() 
{ 
    Map(x => x.Address1); 
} 

Làm thế nào tôi có thể xây dựng một đối tượng tiêu chí đó sẽ được tải các con của con? Các ánh xạ mối quan hệ này có đúng không?

+1

Đã được câu trả lời cung cấp dưới đây có đúng không? Nếu có, vui lòng chọn nó như vậy. – DaveDev

+0

Vâng, giải pháp ở đây là gì? – Jacko

Trả lời

26

Tôi tin rằng bạn có thể cần thêm bí danh vào BillingContact để cho phép bạn truy cập vào Địa chỉ.

Cái gì như:

var criteria = DetachedCriteria.For<Order>() 
    .CreateAlias("BillingContact", "bc") 
    .SetFetchMode("BillingContact", FetchMode.Eager) 
    .SetFetchMode("bc.Address", FetchMode.Eager) 
Các vấn đề liên quan