EF部分欄位更新,自動忽略null欄位
阿新 • • 發佈:2018-11-06
原文:
EF部分欄位更新,自動忽略null欄位
某個專案裡的update程式碼是類似這樣的
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的時候會自動更新所有欄位,這樣就會增加不少麻煩
例如我們在頁面裡編輯資料儲存的時候只希望更新提交的資料,沒有POST的欄位希望保持不變,例如createtime(建立時間),hit(點選數量)等。
於是我想到在UPDATE的時候遍歷entity物件的所有屬性,不是null的屬性標記為Modified=true,這樣在SaveChanges的時候只會更新非NULL的欄位了。大致程式碼如下:
public T Update<T>(T entity) whereT : 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; }
這樣處理後目前執行良好,如果有更好的辦法請告訴我。