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

C#开发 2015-11-20 1631阅读 0评论 0收藏 收藏本文

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对应实体类的一个属性。

转载请注明:图享网 » C#/.NET Entity Framework(EF) Code First Repository泛型类中只更新实体的指定字段(属性)

文章评论

获取验证码