首页 / C#开发 / 正文

C#/.NET Entity Framework(EF) Code First Repository泛型类中只更新实体的指定字段(属性)

7972 发布于: 2015-11-20 读完约需4分钟
csharp 在C#的Entity Framework ORM中,如果使用context.Entry(T).State=EntityState.Modified;来更新实体的话,整个实体的字段都将被更新。那么,如果我们在开发中只需要更新部分指定的字段应该如何操作呢?一种简单的实现方式就是使用表达式树作为更新方法的参数,然后使用Property(T).IsModified=true来对指定字段进行更新,具体的代码如下:
public virtual int Update(T entity, params Expression<Func<T, object>>[] updatedProperties)
    {
      var dbEntityEntry = dataContext.Entry(entity);
      if (updatedProperties.Any())
      {
        foreach (var property in updatedProperties)
        {
          dbEntityEntry.Property(property).IsModified = true;
        }
      }
      else
      {
        foreach (var property in dbEntityEntry.OriginalValues.PropertyNames)
        {
          var original = dbEntityEntry.OriginalValues.GetValue<object>(property);
          var current = dbEntityEntry.CurrentValues.GetValue<object>(property);
          if (original != null && !original.Equals(current))
          {
            dbEntityEntry.Property(property).IsModified = true;
          }
        }
      }
      return dataContext.SaveChanges();
    }
调用就更简单了,如:
_userRepository.Update(user,x=>x.Enabled);
其中的Enabled即为user对应实体类的一个属性。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: 分享一套非常轻量精美的纯Javascript(js)模态弹窗插件--SweetAlert

下一篇: [C#/.NET]Entity Framework(EF) Code First 使用反射加载程序集中的Fluent API配置文件

本文永久链接码友网 » C#/.NET Entity Framework(EF) Code First Repository泛型类中只更新实体的指定字段(属性)

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册