如何在NHibernate中加载引用/集合,除非它是急切预加载的?

时间:2012-05-03 08:35:20

标签: nhibernate lazy-loading

我想创建一个在显示之前预加载所有必需实体的要求,以最大限度地减少因疏忽造成的数据库调用量。是否有可能在返回之前强制NHibernate测试集合?

我想到了在返回对象之前检查NHibernateUtil.IsInitialized()之类的东西,不知道如何全局实现它,而不是为每个属性手动执行它。

注意:我不想为整个应用程序启用急切加载,只需引入稍微更聪明的延迟加载。

1 个答案:

答案 0 :(得分:0)

消费者应该指定应该急切加载哪些路径,并且DAL应该使用SetFetchMode / Fetch来加载路径。然后获取所有数据。

评论答案:加载数据后

  • session.Close()抛弃了会话
  • session.Clear()分离所有实例
  • session.Evict(obj)分离obj和相关实体

e.g。

foreach (var item in queryresults)
{
    session.Evict(item);
}

所有单元化代理和集合现在将抛出LazyLoadExceptions