正常情况下,都是通过EF先取出entity,再修改或删除。
这样会生成一条select和一条update或delete语句,但是通过update/delete sql可以一句就完成。
使用以下代码,通过欺骗EF的方式,使得一句sql完成目标。
using (MyDbContext ctx = new MyDbContext())
{
Student a1 = new Student() { Id = 10, Name = "sstudent0001" };
EntityEntry e1 = ctx.Entry(a1);
e1.Property("Name").IsModified = true;
Student a2 = new Student() { Id = 11 };
ctx.Entry(a2).State = EntityState.Deleted;
await ctx.SaveChangesAsync();
}
之所以不推荐,是因为
- 提升性能有限
- 增加代码维护难度。