正常情况下,都是通过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();
    }

之所以不推荐,是因为

  1. 提升性能有限
  2. 增加代码维护难度。