2017-02-22 68 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

Спасибо, Мухаммад. Это не совсем то, что я хотел, но ты дал мне отличную идею! –