某个项目里的update代码是相似这样的this
public T Update<T>(T entity) where T : ModelBase { var set = this.Set<T>(); set.Attach(entity); this.Entry<T>(entity).State = EntityState.Modified; this.SaveChanges(); return entity; }
当运行的时候EF在UPDATE的时候会自动更新全部字段,这样就会增长很多麻烦spa
例如咱们在页面里编辑数据保存的时候只但愿更新提交的数据,没有POST的字段但愿保持不变,例如createtime(建立时间),hit(点击数量)等。code
因而我想到在UPDATE的时候遍历entity对象的全部属性,不是null的属性标记为Modified=true,这样在SaveChanges的时候只会更新非NULL的字段了。大体代码以下:对象
public T Update<T>(T entity) where T : ModelBase { var set = this.Set<T>(); set.Attach(entity); foreach (System.Reflection.PropertyInfo p in entity.GetType().GetProperties()) { if (p.GetValue(entity) != null) { this.Entry<T>(entity).Property(p.Name).IsModified = true; } } this.SaveChanges(); return entity; }
这样处理后目前运行良好,若是有更好的办法请告诉我。blog