城堡activerecord懒惰得到id

时间:2013-06-27 10:35:38

标签: lazy-loading castle-activerecord

我有这两个类

[ActiveRecord("Customers", Lazy=true)]
public class Customer : ActiveRecordBase<Customer>
{
    [PrimaryKey(PrimaryKeyType.Identity, Access = PropertyAccess.AutomaticProperty)]
    public virtual int Id { get; private set; }

    [Property]
    public virtual string Name { get; set; }

    [HasMany(Lazy = true)]
    public virtual IList<Order> Orders { get; set; }
}

[ActiveRecord("Orders", Lazy=true)]
public class Order : ActiveRecordBase<Order>
{
    [PrimaryKey(PrimaryKeyType.Identity, Access = PropertyAccess.AutomaticProperty)]
    public virtual int Id { get; private set; }

    [Property]
    public virtual string Product { get; set; }

   [BelongsTo(Lazy = FetchWhen.OnInvoke)]
   public virtual Customer Customer { get; set; }
}

我想选择所有订单和foreach,获取客户的ID。 所以我这样做:

using (new SessionScope())
{
   var orders = Order.FindAll();
   foreach (var o in orders)
   {
      int id = o.Customer.Id;
   }
}

它有效,但它为每次调用o.Customer.Id创建一个SELECT短语。 现在,Order已经拥有了客户的Id,那么如何在不重新访问数据库的情况下获得它?

1 个答案:

答案 0 :(得分:0)

以下代码应该允许您获取id(但我目前无法测试它):

int id = (int)((INHibernateProxy)order.Customer).HibernateLazyInitializer.Identifier;

问候

Juy Juka