1

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

我想到了NHibernateUtil.IsInitialized()在返回对象之前进行检查之类的事情,但不确定如何在不手动为每个属性手动执行的情况下全局实现它。

注意:我不想为整个应用程序启用预加载,只需引入一个更智能的延迟加载。

4

1 回答 1

0

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

对评论的回答:在加载数据之后

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

例如

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

所有未初始化的代理和集合现在都将抛出 LazyLoadExceptions

于 2012-05-08T08:54:48.383 回答