请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

EF指定更新字段

[复制链接]
查看2019 | 回复0 | 2019-9-26 09:21:24 | 显示全部楼层 |阅读模式

利用EF做更新时,若没有举行跟踪会默认全字段更新,那怎么做到只更新我们想要更新的字段呢?

  1. 1 /// <summary>
  2. 2 /// 修改指定属性的单条数据
  3. 3 /// </summary>
  4. 4 /// <typeparam name="T">实体</typeparam>
  5. 5 /// <param name="context">上下文</param>
  6. 6 /// <param name="model">要修改的实体信息</param>
  7. 7 /// <param name="expression">指定修改的字段</param>
  8. 8 public static void Modify<T>(this DbContext context, T model, Expression<Func<T, object>> expression)
  9. 9 where T : class
  10. 10 {
  11. 11 context.Update(model);
  12. 12 //4.1将 对象 添加到 EF中
  13. 13 var entry = context.Entry<T>(model);
  14. 14 //4.2先设置 对象的包装 状态为 Unchanged
  15. 15 entry.State = EntityState.Unchanged;
  16. 16 //4.3循环 被修改的属性名 数组
  17. 17 foreach (var proInfo in expression.GetPropertyAccessList())
  18. 18 {
  19. 19 if (!string.IsNullOrEmpty(proInfo.Name))
  20. 20 //4.4将每个 被修改的属性的状态 设置为已修改状态;背面天生update语句时,就只为已修改的属性 更新
  21. 21 entry.Property(proInfo.Name).IsModified = true;
  22. 22 }
  23. 23 }
复制代码

利用:如下,更新表Model中Status和UpdateTime字段

  1. 1 _dbContext.Modify(Model, p => new
  2. 2 {
  3. 3 p.Status,
  4. 4 p.UpdateTime
  5. 5 });
  6. 6 await _dbContext.SaveChangesAsync();
复制代码

有的同学会发现,调用的时候利用了_dbContext.SaveChangesAsync(),为什么不直接集成到方法内里呢?这个就因需求而厘革了,如果你的项目中不涉及到多张表的厘革,不需要做一些事件性的处理,那集成到一个方法内里完全没有题目,也支持这么做。







来源:https://www.cnblogs.com/az4215/archive/2019/09/24/11576193.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则