前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的。最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站。索性 就把原来的底层全重新了套用了我现在的架构 EF6.0+autofac+三层架构,上层的asp.net没有变。改完后发现交班页面打开巨慢。
跟踪EF生成的sql语句 发现生成的sql 有问题,查找的全表,而全表有近10万条的数据。
继续跟踪数据库的耗时查询 发现确实是这条语句占时间
为什么会这样呢,我在查询里做条件搜索了,为啥 结果不对呢?
贴出 BaseRepository.cs 的代码
1 public class BaseRepository<T> :IDBbase<T> where T : class 2 { 3 //实例化EF框架 4 protected skdbContext db = new skdbContext(); 5 6 //添加 7 public T AddEntities(T entity) 8 { 9 db.Entry<T>(entity).State = EntityState.Added; 10 db.SaveChanges(); 11 return entity; 12 } 13 14 //修改 15 public bool UpdateEntity(T entity) 16 { 17 db.Set<T>().Attach(entity); 18 db.Entry<T>(entity).State = EntityState.Modified; 19 return db.SaveChanges() > 0; 20 } 21 22 //修改 23 public bool DeleteEntities(T entity) 24 { 25 db.Set<T>().Attach(entity); 26 db.Entry<T>(entity).State = EntityState.Deleted; 27 return db.SaveChanges() > 0; 28 } 29 30 //查询 31 public IQueryable<T> LoadEntities(Func<T, bool> wherelambda) 32 { 33 return db.Set<T>().Where<T>(wherelambda).AsQueryable(); 34 } 35 //查询单个 36 public T LoadEntitie(Func<T, bool> wherelambda) 37 { 38 return db.Set<T>().FirstOrDefault<T>(wherelambda); 39 } 40 41 //分页 42 public IQueryable<T> LoadPagerEntities<S>(int pageSize, int pageIndex, out int total, 43 Func<T, bool> whereLambda, bool isAsc, Func<T, S> orderByLambda) 44 { 45 var tempData = db.Set<T>().Where<T>(whereLambda); 46 47 total = tempData.Count(); 48 49 //排序获取当前页的数据 50 if (isAsc) 51 { 52 tempData = tempData.OrderBy<T, S>(orderByLambda). 53 Skip<T>(pageSize * (pageIndex - 1)). 54 Take<T>(pageSize).AsQueryable(); 55 } 56 else 57 { 58 tempData = tempData.OrderByDescending<T, S>(orderByLambda). 59 Skip<T>(pageSize * (pageIndex - 1)). 60 Take<T>(pageSize).AsQueryable(); 61 } 62 return tempData.AsQueryable(); 63 } 64 }