データベース優先の設計で EntityFramework 5.0.0 を使用しており、http://blogs.msdn.com/b/dsimmons/ で説明されている方法を使用して、非常に大きな結果セットに対するクエリで NoTracking MergeOption を指定しようとしています。 archive/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...
}
}
ただし、entitiesQry をキャストするときに実行時例外が発生します。
タイプ 'System.Data.Entity.Infrastructure.DbQuery`1[Namespace.EntityTypeA]' のオブジェクトをタイプ 'System.Data.Objects.ObjectQuery' にキャストできません。
その記事の年齢と名前空間の違いを考えると、これは EF 4 と EF 5 の間で変更されたものだと思いますか? しかし、MergeOption を指定するより適切な方法が見つかりません...どんな助けもいただければ幸いです。
明確にするために、MergeOption を設定する行がなくてもコードは完全に正常に実行されますが、データ セットが数百万のレコードにあることを考えると、「メモリの問題」が発生しています。