2017-02-22 39 views
0

當我使用SaveChanges保存實體並僅保存有效字段時,是否可以跳過無效值?如何跳過SaveChanges上的無效字段

跳過實體級別很簡單,但我無法在字段級別上找到這樣做的方法。

+0

您可以驗證調用的SaveChanges之前所有的域()且僅當它通過驗證 –

+0

應注意,美通過滿足所有必要的約束值放在賦值到實體在你的實體上 –

+0

你爲什麼需要這個?你將最終得到半舊和半新的對象,以及不瞭解信息的一半消失的用戶 –

回答

1

穆罕默德的回答給了我很大的想法。該解決方案是非常簡單的:

 try 
     { 
      context.Entry(objInDB).State = EntityState.Modified; 
      context.SaveChanges(); 
     } 
     catch (Exception ex) 
     { 
      var exception = ex as DbEntityValidationException; 
      if (exception != null) 
      { 
       exception.EntityValidationErrors.ToList().ForEach(error => 
       { 
        error.ValidationErrors.ToList().ForEach(validationError => 
        { 
         error.Entry.Property(validationError.PropertyName).IsModified = false; 
        }); 
       }); 
       context.SaveChanges(); 
      } 
     } 
+0

偉大的你解決了問題。快樂編碼。 –

1

改性可以標記單屬性:

context.Entry(obj).Property(o => o.Property3).IsModified = true; 
context.Entry(obj).Property(o => o.Property4).IsModified = true; 

我寧願從數據庫裝載實體,然後更新它:

var objInDB = context.Objects.Single(o => o.Id == obj.Id); 

obj.Property1 = objInDB.Property1; 
obj.Property2 = objInDB.Property2; 

context.Entry(objInDB).CurrentValues.SetValues(obj); 

context.SaveChanges(); 
+0

謝謝,穆罕默德。這不完全是我想要的,但你給了我一個好主意! –