zoukankan      html  css  js  c++  java
  • EF指定更新字段

    使用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(),为什么不直接集成到方法里面呢?这个就因需求而变化了,如果你的项目中不涉及到多张表的变化,不需要做一些事务性的处理,那集成到一个方法里面完全没有问题,也支持这么做。

  • 相关阅读:
    猪猪的机器学习笔记(八)聚类
    猪猪的机器学习笔记(七)最大熵模型
    猪猪的机器学习笔记(九)推荐系统
    标签button:点击button按钮时,出现了页面自动刷新的情况
    SQL案例
    SQL学习记录:函数(二)
    SQL学习记录:定义(一)
    C# 后台报错输出到日志
    DateTime 时间类型总结(前端)
    笛卡尔积的使用
  • 原文地址:https://www.cnblogs.com/az4215/p/11576193.html
Copyright © 2011-2022 走看看