【发布时间】:2009-12-28 17:46:06
【问题描述】:
我已经开始深入研究 Nhibernate,虽然有很多我喜欢的东西,但有一点我不喜欢:“生成代理”/延迟加载机制。在访问可能触发延迟加载的属性之前,我必须维护对 ISession 的某种引用并确保实体与会话相关联,这种想法在我的视图模型中比我欣赏的要复杂一些。在我使用的最后一个 ORM 映射器中,我们采用了一种不同的延迟加载方法,它可以完全忽略会话问题,但代价是更少的 POCO 实体。我基本上想用 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 中是否支持这样做?
【问题讨论】:
标签: c# nhibernate lazy-loading