EntityFramework Core 另类方式删除和更新记录

本文探讨了在EntityFramework Core中如何避免查询实体直接进行删除和更新操作,以提高性能。通过ExecuteSqlRaw方法执行自定义SQL,以及创建自定义扩展方法,实现了直接删除、更新记录以及批量操作。这些方法不涉及EntityFramework的状态跟踪,若需事务处理,需配合Transaction。文章还分享了实现原理和相关代码示例。
摘要由CSDN通过智能技术生成

1. 问题

考虑以下场景:

1.1 删除记录

通常的方式是先使用FirstOrDefault查出某个Entity,然后再用DbSet的Remove方法,最后调用DbContext的SaveChanges。

整个过程需要先从数据库查出记录,而且是查出所有的列,难免会带来一定的性能损耗。

有没有办法不查询Entity而直接删除记录?

1.2 更新记录

同删除一样,需要先使用FirstOrDefault查出需要更新的Entity,然后给对应的字段赋值,最后SaveChanges。

同样也会带来一定的性能损耗,有没有办法不查询Entity而直接更新某些字段?

1.3 批量删除或者更新

需要先使用Query查出列表,然后Foreach来循环删除或者更新。

有没有办法直接指定条件来批量删除或者更新记录?

2. ExecuteSqlRaw

方案之一就是使用DbContext中Database属性的ExecuteSqlRaw方法。

例如:

  • ExecuteSqlRaw(“Delete Table Where Id={0}”,id)
  • ExecuteSqlRaw(“Update Table Set Field1={0} Where Id={1}”, field1, id)

这样没什么毛病,唯一不足的是你要知道表结构,还要有简单的Sql知识。

3. 自定义扩展

另一个方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值