使用EF做更新时,若没有进行跟踪会默认全字段更新,那怎么做到只更新我们想要更新的字段呢?
1 /// <summary> 2 /// 修改指定属性的单条数据 3 /// </summary> 4 /// <typeparam name="T">实体</typeparam> 5 /// <param name="context">上下文</param> 6 /// <param name="model">要修改的实体信息</param> 7 /// <param name="expression">指定修改的字段</param> 8 public static void Modify<T>(this DbContext context, T model, Expression<Func<T, object>> expression) 9 where T : class 10 { 11 context.Update(model); 12 //4.1将 对象 添加到 EF中 13 var entry = context.Entry<T>(model); 14 //4.2先设置 对象的包装 状态为 Unchanged 15 entry.State = EntityState.Unchanged; 16 //4.3循环 被修改的属性名 数组 17 foreach (var proInfo in expression.GetPropertyAccessList()) 18 { 19 if (!string.IsNullOrEmpty(proInfo.Name)) 20 //4.4将每个 被修改的属性的状态 设置为已修改状态;后面生成update语句时,就只为已修改的属性 更新 21 entry.Property(proInfo.Name).IsModified = true; 22 } 23 }
使用:如下,更新表Model中Status和UpdateTime字段
1 _dbContext.Modify(Model, p => new 2 { 3 p.Status, 4 p.UpdateTime 5 }); 6 await _dbContext.SaveChangesAsync();
来源:博客园
作者:酷学大叔
链接:https://www.cnblogs.com/az4215/p/11576193.html