26

オブジェクト、注文、連絡先、住所の階層があります。

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);
} 

子の子をロードする基準オブジェクトを作成するにはどうすればよいですか?これらの関係マッピングは正しいように見えますか?

4

1 に答える 1

27

BillingContact の Address にアクセスできるようにするには、BillingContact にエイリアスを追加する必要があると思います。

何かのようなもの:

var criteria = DetachedCriteria.For<Order>()
  .CreateAlias("BillingContact", "bc")
  .SetFetchMode("BillingContact", FetchMode.Eager)
  .SetFetchMode("bc.Address", FetchMode.Eager)
于 2009-02-19T14:01:33.520 に答える