1. 程式人生 > >EF部分欄位更新,自動忽略null欄位

EF部分欄位更新,自動忽略null欄位

原文: 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) 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; }

這樣處理後目前執行良好,如果有更好的辦法請告訴我。