EntityFramewrok 使用

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();
复制代码

 

posted @   十二月雨  阅读(600)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示