1.使用一些查询比较复杂或者需要拼接的查询的时候最好一直保持IQueryable。一直到最后取数据的时候才进行查询。例如分页之类的条件拼接。
var query = dbset.Where(expression); query = IsDESC ? query.OrderByDescending(orderByExpression) : query.OrderBy(orderByExpression); PageData<T> pageData = new PageData<T>(); pageData.TotalCount = query.Count(); pageData.DataList = query.Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList();
2.使用AsNoTracking可以让查询效率更高一些查询出来的东西不会放在缓存里进行追踪处理。
db.TestInfo.Where(e=> e.AName == "张三").AsNoTracking().ToList()
3.在查询后对外键关联处理比较多的情况下用Include进行预加载,效率会更高。
var list = db.TestInfo.Where(e => e.AName.Contains("张")).Include("TestGroup").ToList(); foreach (var item in list) { string groupName = item.TestGroup.GroupName; }
4.批量修改网上有个扩展库挺好用的。EntityFramework.Extended,它提供了批量删除,批量修改等功能。
批量更新:
var query = db.TestInfo.Where(e => e.AName == "2014"); query.Update(e => new TestInfo { AName = "1215" });
将TestInfo里所有AName等于2014的AName改成1215
批量删除:
db.TestInfo.Where(e=> e.AName=="2014").Delete();
5.批量添加网上也有个扩展库。EntityFramework.BulkInsert插入速度很快10000条数据,1秒就ok了,虽然ef提供了AddRange,但是需要40多秒钟等待。
TestInfo testInfo; for (int i = 0; i < 10000; i++) { testInfo = new TestInfo(); testInfo.ID = Guid.NewGuid(); testInfo.AName = "2014"; testInfo.GID = new Guid("D9B3DC41-C584-4BA7-8443-A2F71309740A"); list.Add(testInfo); } db.BulkInsert(list); //db.TestInfo.AddRange(list); //db.SaveChanges();
时间: 2024-10-21 14:58:16