我正在使用C# 4.0和EntityFramework 6.0创建一个应用程序。
我尝试从数据库中检索项目列表,但问题是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子句不在其中。
如何修改我的GetList函数以包括where子句?
希望这些信息已经足够清晰,对于我的英语我感到抱歉。 这不是我的母语:/
无论如何,感谢您的帮助。
DbContext
,那么Context
是什么?这里不应该需要使用AsQueryable
。Context.Set<TEntity>()
。 - ta.speot.is