EF指定更新字段
程序员文章站
2022-06-05 20:44:50
使用EF做更新时,若没有进行跟踪会默认全字段更新,那怎么做到只更新我们想要更新的字段呢? 使用:如下,更新表Model中Status和UpdateTime字段 有的同学会发现,调用的时候使用了_dbContext.SaveChangesAsync(),为什么不直接集成到方法里面呢?这个就因需求而变化 ......
使用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();
有的同学会发现,调用的时候使用了_dbcontext.savechangesasync(),为什么不直接集成到方法里面呢?这个就因需求而变化了,如果你的项目中不涉及到多张表的变化,不需要做一些事务性的处理,那集成到一个方法里面完全没有问题,也支持这么做。
上一篇: 还有童年味道
下一篇: 牙痛不能吃什么,否则会加重牙痛的病情