某個項目裏的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