EF Core 优化、实体状态跟踪、批量操作、全局查询筛选器
2022/7/28 6:53:47
本文主要是介绍EF Core 优化、实体状态跟踪、批量操作、全局查询筛选器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
EF Core 优化、实体状态跟踪、批量操作、全局查询筛选器
EF Core 优化之AsNoTracking
当数据仅仅只是做查询不修改的情况下,尤其是数据量还不小的情况下,使用可以减少内存的消耗
var u2 = await ctx.Users.AsNoTracking().Take(3).ToListAsync();
注意:
如果使用了AsNoTracking()之后下面对对象进行了修改,调用SaveChangesAsync()并不会对数据库的数据进行修改。
EF Core 实体状态跟踪的妙用
//先查询 在修改 实际是执行了2次sql语句 var book = await ctx.Books.FirstAsync(); book.Price = 101; ctx.SaveChanges(); //下面只执行了一次sql语句 Book b1 = new Book { Title = "标题" + 10086, PubTime = DateTime.UtcNow, Price = 101, AuthorName = "firstsaofan" + 10086 };//此处状态是已分离 var entry1 = ctx.Entry(b1); entry1.Property("Price").IsModified = true; ctx.SaveChanges(); //直接删除这条记录 Book b3 = new Book { Id = 2 }; ctx.Entry(b3).State = EntityState.Deleted; ctx.SaveChanges();
总结:
上述代码能看懂即可,不推荐使用,由此带来的性能提升很微弱,使用不当,弊大于利。仅作了解
EF Core 批量插入,更新,删除(2022.07.27)
此时EF Core不支持高效的删除,更新,插入数据,都是逐条操作AddRange、DeleteRange等
微软计划EF Core7 会有此功能大约在2022.11 对应今年的Net7在同月发布
sqlBulkCopy(批量操作)
微软官方issue
Zack.EFCore.Batch nuget包 支持批量操作
EF Core全局查询筛选器
使用场景: 逻辑删除数据(软删除)、多租户
//在对应的实体的config类文件里面的config方法加上 builder.HasQueryFilter(e => e.IsDeleted == false); //之后所有的查询默认都会加上这个条件 //如果在特定不需要全局筛选器 使用IgnoreQueryFilters()即可 foreach (var item in ctx.Books.IgnoreQueryFilters().Where(b => b.AuthorName.Contains("fir"))) { Console.WriteLine(item.Id+item.Title); }
注意事项:
使用全局筛选器之后,根据具体项目的实际情况,可能会影响性能,到时候需要自己来对筛选条件的字段添加索引,不一定会产生性能问题。但是如果产生,这是一个解决方向。
这篇关于EF Core 优化、实体状态跟踪、批量操作、全局查询筛选器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
- 2024-05-08代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
- 2024-05-08今天开始程序员不用再发愁写commit message了,全部由CodeGeeX自动完成!