EF Core 部分更新 partial update

有一些在性能要求比较高的地方,或者有一些场景下数据的更改不需要先获取数据,我们可以通过使用 Attach的方式来让DBContext跟踪我们实体的变更。这样当我们调用SaveChagnes的时候它就会生适当的sql

如下面的例子假设我们的Student有一大堆的属性。而这个时候我们只想改它的Age。比如年龄加1。 我们也不需要获取其它的属性数据。 我们就可以用下面的代码了。

//获取DBCotnext
var malemaDbContext = sp.GetService<MalemaDbContext>();

var partialModel = malemaDbContext.Students.Select(x => new
{ 
    x.Id,
    x.Age
}).FirstOrDefault(x => x.Id == 1);

var partialUpdated = new Student()
{
    Age = partialModel.Age,
    Id = partialModel.Id //Id这个是主键。必须得有主键,
}; 

malemaDbContext.Attach(partialUpdated); // attach之后就会进行跟踪了。 
partialUpdated.Age = partialModel.Age+1; //这边进行更改。 
// 如果想把属性Name 改成Empty。跟原来的值一样是没效的。 必须跟Attach之前的值不一样才会有效果。

malemaDbContext.SaveChanges();

生成的sql如下

udpate stduent set Age = 50 where id=1
最近更新的
...