我在数据库优先设计中使用 EntityFramework 5.0.0,并尝试使用http://blogs.msdn.com/b/dsimmons/中解释的方法对非常大的结果集的某些查询指定 NoTracking MergeOption存档/2010/01/12/ef-merge-options-and-compiled-queries.aspx
我的代码看起来像:
using (var dbContext = Utility.GetDataContext()) {
IQueryable<EntityTypeA> entitiesQry = dbContext.EntitiesA.Where(x => (x.field== this.Property));
((System.Data.Object.ObjectQuery)entitiesQry).MergeOption = System.Data.Objects.MergeOption.NoTracking;
foreach (var rec in entitiesQry) {
// do things...
}
}
但是,我在转换 entityQry 时遇到运行时异常:
无法将“System.Data.Entity.Infrastructure.DbQuery`1[Namespace.EntityTypeA]”类型的对象转换为“System.Data.Objects.ObjectQuery”类型。
鉴于那篇文章的年代和不同的命名空间,我猜这在 EF 4 和 EF 5 之间发生了变化?但我找不到任何更合适的方式来指定 MergeOption... 任何帮助将不胜感激。
需要明确的是:我的代码在没有设置 MergeOption 的行的情况下运行得非常好,但是鉴于我的数据集包含数百万条记录,我遇到了“内存问题”。