说我有以下类定义:
public class Order
{
public virtual int Id { get; protected set; }
public virtual IList<OrderItemBase> OrderItems { get; set; }
}
public class OrderItemBase
{
public virtual int Id { get; protected set; }
public virtual string OrderRef { get; set; }
}
public class ProductOrder : OrderItemBase
{
public virtual Product Product { get; set; }
}
public class OtherOrder : OrderItemBase
{
public virtual string MiscData { get; set; }
}
public class Product
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
}
使用以下方式的映射:
public class OrderMap : ClassMap<Order>
{
this.Id(x => x.Id);
this.HasMany(x => x.OrderItems).Inverse().KeyColumn("OrderId").Cascade.All();
}
public class OrderItemMap : ClassMap<OrderItembase>
{
this.Id(x => x.Id);
this.Map(x => x.OrderRef);
this.DiscriminateSubClassesOnColumn("OrderTypeId");
}
public class ProductOrderMap : ClassMap<ProductOrder>
{
this.DiscriminatorValue(1);
this.References(x => x.Product).Column("ProductId");
}
public class OtherOrderMap : ClassMap<OtherOrder>
{
this.DiscriminatorValue(2);
this.Map(x => x.MiscData);
}
public class ProductMap : ClassMap<Product>
{
// ... can't be arsed to type more code in here, you get the idea
}
现在提问题:
当我为订单存储库编写查询时,我想要一些方法来急切加载所有OrderItems:
return this.All()
.Where(o => o.Id == id)
.FetchMany(o => o.OrderItems)
还有一些方法可以加载相关的ProductOrder产品项目:
return this.All()
.Where(o => o.Id == id)
.FetchMany(o => o.OrderItems) // Ok so far...
.ThenFetch(oi => oi.Product) // Uh-oh, the base order item doesn't have Product
我怎样才能获得一个子类别的项目来急切加载它的关系,但只有在我想要的时候呢?