EF指定更新字段

匿名 (未验证) 提交于 2019-12-03 00:11:01

使用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();
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!