我有一个对象层次结构,订单,联系人,地址:
public class Order {
public virtual Contact BillingContact { get; set; }
}
public class Contact {
public virtual Address Address { get; set; }
}
我想按ID查询订单,并急切加载billingcontact及其地址。
var criteria = DetachedCriteria.For<Order>()
.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);
}
如何构建一个可以加载孩子孩子的标准对象?这些关系映射看起来是否正确?
答案 0 :(得分:26)
我相信你可能需要在BillingContact中添加一个别名,以允许你访问它的地址。
类似的东西:
var criteria = DetachedCriteria.For<Order>()
.CreateAlias("BillingContact", "bc")
.SetFetchMode("BillingContact", FetchMode.Eager)
.SetFetchMode("bc.Address", FetchMode.Eager)