2013-06-27 18 views
0

나는이 두 클래스가성 액티브 게을러 아이디

[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

다음 코드는 (하지만 난 그 순간에 그것을 테스트 할 수있다) ID를 얻을 수 있도록해야합니다

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

인사말

Juy Juka 예, 작동

+0

, 감사합니다 !! !! – yshdev