2010-09-27 119 views
0

我有流利的映射一个(虚构的)类:所有的NHibernate引用默认情况下是LazyLoaded?

public class Customer 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Employee Responsible { get; set; } 
    public virtual IList<Order> Orders { get; set; } 
} 

public class CustomerMapping : ClassMap<Customer  
{ 
    public CustomerMapping() 
    { 
     Id(c => c.Id); 
     Map(c => c.Name); 
     References(c => c.Responsible); 
     HasMany(c => c.Orders); 
    } 
} 

现在 - 如果我取从数据库中客户的hasMany引用是Lazyloaded,但引用引用似乎并没有被延迟加载。这是预期的吗?我需要明确吗?

var fromDb = Session.Get<Customer>(id); 
Assert.That(!NHibernateUtil.IsInitialized(fromDb.Orders)); 
Assert.That(!NHibernateUtil.IsInitialized(fromDb.Reponsible)); // <-- fails 

回答

2

默认情况下,引用(多对一)是延迟加载的。我敢打赌,你以前在同一个会话中加载了Responsible对象,并且它是从一级缓存而不是数据库中检索的。

+0

Thx。是的 - 这就是我的想法..我不加载负责任何比我加载在会议其他地方的订单,但我会尝试将测试隔离到一个单独的会议.. – stiank81 2010-09-27 14:23:04