2

FetchMode.Eager我有几个通过 FNH 配置的实体,以便在我请求实例(从数据库)时使用语法急切加载子实体。现在我的印象是,这会忽略映射中的任何延迟加载,并用“真​​实”数据填充子实体。

我想这样做的原因是因为我想使用 aParallel.ForEach来迭代实体集合并生成一组结果,但是我收到以下错误:

[18000] System.InvalidOperationException:
There is already an open DataReader associated with this Command 
which must be closed first. 

如果我使用“NHibernateUtil.Initialize”来初始化所有子实体,那么它会按预期工作。

我对使用的理解有误FetchMode.Eager吗?

4

1 回答 1

1

我真的永远不会尝试这样做。每个 Parallel.ForEach 函数可以在不同的线程上运行。根据您的配置,NHibernate ISession 是针对线程存储的,这意味着除了调用线程之外的任何东西都无法访问会话,这就是整个事情失败的原因。

就我个人而言,我会将整个内容检索到一个传输对象中,然后对其执行 Parallel.ForEach 。

于 2011-03-27T15:26:41.390 回答