日期:2014-05-20  浏览次数:21070 次

EF框架下的 并行计算问题
大致情况如下:
1.使用微软的EF框架下,一个数据实体类A下面有一个实体类B类别的属性,在Model层,进行进一步的转化,及把实体层的Model转换为逻辑层的Model

2.在这个转化过程中采用了并行计算的东西,现在出现的问题是这个A的B属性,是的的确确有值的,在调试阶段,通过快速监视,手动读一遍 很ok 都能出来值,但是如果不手动读一遍,这个值就出不来,难道调用ToList()只能强制终止第一层的查询么?

相关代码

 //query是通过EF一些筛选条件的Linq语句,并且没有过强制停止延迟计算的操作
 IList<PatientOperation> list = query.ToList();
 IList<PatientOperationInfo> result = GetOperationListByQuery(list);


 //GetOperationListByQuery中的核心代码段
  ConcurrentBag<PatientOperationInfo> result = new ConcurrentBag<PatientOperationInfo>();
            Parallel.ForEach(query, (model) =>
            {
                result.Add(DataInfoConvert4Paitent.ConvertToPatientOperationInfo(model));
            });
//现在的问题是model 下面的一个实体类别的属性没有完全复制完毕

------解决方案--------------------
Try:

TableA.Include("TableB")
------解决方案--------------------
引用:
那种方法我试过了,完了用Sqlprofiler监听,还是不行,循环里面查数据库了

是吗?这么奇怪,你把查询和实体类结构贴出来看看,或者发个贴问问,为什么用Include做eager loading不起作用?