所有的NHibernate引用默认情况下是LazyLoaded?
问题描述:
我有流利的映射一个(虚构的)类:所有的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
答
默认情况下,引用(多对一)是延迟加载的。我敢打赌,你以前在同一个会话中加载了Responsible对象,并且它是从一级缓存而不是数据库中检索的。
Thx。是的 - 这就是我的想法..我不加载负责任何比我加载在会议其他地方的订单,但我会尝试将测试隔离到一个单独的会议.. – stiank81 2010-09-27 14:23:04