我已经开始深入研究Nhibernate,虽然有很多我喜欢的事情,但有一种我不喜欢:“生成代理”/延迟加载机制。在我看来,我必须保持某种对ISession的引用,并确保实体与会话相关联,然后才能访问可能会触发延迟加载的属性,这在我的视图模型中会更有帮助。在我使用的最后一个ORM映射器中,我们采用了一种不同的延迟加载方法,这使得用于以较少的POCO实体为代价完全忽略会话问题。基本上,我想做与NHibernate同样的事情,有一些语法类似于此:nhibernate你可以懒惰加载没有代理?
public class Order
{
// this will introduced through the ctor using for ex an interceptor and Castle Windsor
private IOrmService ormService;
List<OrderLine> details = new List<OrderLine>();
public IEnumerable<OrderLine> Details
{
get
{
ormService.LazyLoad(this, o => o.Details);
return this.details;
}
}
}
凡想法是,如果集合已经被加载的ormService将简单地忽略从实体延迟加载请求(从不知道国家管理问题:-))。我研究了NHibernateUtils类,它有一些Initialized和Initialize-collection方法,但他们假设你使用的是代理。基本上,我需要一种告诉nhibernate的方式,例如:“嘿,使用我给你的这个会话填充这个属性”。国家管理等可以在外部处理。在Nhibernate中是否支持这个功能?