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. 自定义扩展
另一个方案