我有这两个类
[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,那么如何在不重新访问数据库的情况下获得它?
答案 0 :(得分:0)
以下代码应该允许您获取id(但我目前无法测试它):
int id = (int)((INHibernateProxy)order.Customer).HibernateLazyInitializer.Identifier;
问候
Juy Juka