我有一个对象的层次结构,订单,联系人,地址:
public class Order { public virtual Contact BillingContact { get; set; } } public class Contact { public virtual Address Address { get; set; } }
我想通过id查询订单,并急切加载billingcontact及其地址.
var criteria = DetachedCriteria.For() .SetFetchMode("BillingContact", FetchMode.Eager)
此标准急切加载BillingContact,但可以理解的不是BillingContact的地址.如果我添加:
.SetFetchMode("BillingContact.Address", FetchMode.Eager)
这无济于事.
另请注意,这些关系是单向的:
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); }
如何构建一个可以加载孩子孩子的标准对象?这些关系映射看起来是否正确?
我相信您可能需要为BillingContact添加别名,以允许您访问它的地址.
就像是:
var criteria = DetachedCriteria.For() .CreateAlias("BillingContact", "bc") .SetFetchMode("BillingContact", FetchMode.Eager) .SetFetchMode("bc.Address", FetchMode.Eager)