我目前正在使用EntityFramework 6.0在C#4.0中创建一个应用程序.
我正在尝试从数据库中检索项目列表,但问题是EF框架生成的SQL查询不包含where子句.
因此,整个表/视图被加载到内存中,只需要10秒钟就可以获得2或3个项目.
下面是我的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子句无处可去
我希望我对这些信息足够清楚,我很抱歉我的英语.
这不是我的母语:/
无论如何,谢谢你的帮助