假设我们有一个数据库表(User),现在需要更新两个字段(Username,Tel),。现在我们使用EfCode来进行更新操作是不是如下代码?
Var models = new User() { Username="测试数据", Tel=xxxxxx }; entity.User.Update(models); entity.SaveChanges();
在假设,如果这个User里有100个字段,那么上面代码会直接更新这100个字段,虽然大部分的情况下不影像什么结果。但做为有程序洁癖的我们来说,必须要上性能最佳的SQL语句。那么如何优雅的只更新Username和Tel这个字段呢?好把,现在开始修改上诉的代码
var models = new User() { Username="测试数据", Tel=xxxxxx }; entity.Set<User>().Update(Username).State = EntityState.Unchanged; entity.Entry(model).Property(b => b.Username).IsModified = true; entity.Entry(model).Property(b => b.Tel).IsModified = true; entity.SaveChanges();
OK,我们可以通过SQL语句的跟踪如下图可以看到,还原成原生的SQL语句就只更新了需要的部分。
当然,上诉的图片跟我说的例子里的表和字段有冲突,但结果是不会变得,因为我的这个只需要更新State和Message两个字段。大家不要在意这些细节!