現在、C#4.0でEntityFramework 6.0を使用してアプリケーションを作成しています。Where句はSQLクエリに含まれていません
データベースからアイテムのリストを取得しようとしていますが、問題は、EFフレームワークによって生成されたSQLクエリにwhere句が含まれていないことです。
したがって、テーブル/ビュー全体がメモリにロードされ、わずか2〜3個のアイテムを取得するのに約10秒かかります。以下は
、私GenericRepostitoryから方法:
public IList<TEntity> GetList(Func<TEntity, bool> where, params Expression<Func<TEntity, object>>[] navigationProperties)
{
using (var dbContextScope = contextScopeFactory.CreateReadOnly())
{
IQueryable<TEntity> dbQuery = Context.Set<TEntity>().AsQueryable();
foreach (Expression<Func<TEntity, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<TEntity, object>(navigationProperty);
var list = dbQuery
.AsNoTracking()
.Where(where);
Context.Database.Log = s => Debug.WriteLine(s);
return list.ToList<TEntity>();
}
}
そして、私はこのようにそれを呼び出す:
var repository = repositoryFactory.Get<Context, Entity>();
var items = repository.GetList(x => x.FakeID <= 10);
リターン結果は良いのですが、それは取得する約10秒かかります。 そして、デバッグによって生成されたSQLクエリが書き込まれるとき、where句はどこにもありません。
where Get節にwhere句を含めるにはどうすればよいですか?
私はこれらの情報で十分に明確であり、私の英語は申し訳ありません。
' Context.Set().AsQueryableを()が必要です'? AsQueryableはここでは必要ないはずです。 –
はい、私はそれを削除すべきではありません。それは私が数時間以来この問題に悩まされていて、いろいろなことを試したからです... – Mica