2017-02-22 13 views
0

SaveChangesでエンティティを保存して有効なフィールドのみを保存するときに無効な値をスキップすることはできますか?SaveChangesで無効なフィールドをスキップする方法

エンティティレベルをスキップするのはかなり簡単ですが、フィールドレベルでこれを行う方法を見つけることができません。

+0

あなたは(SaveChangesメソッドを呼び出す前に、すべてのフィールドを検証)し、それを検証 –

+0

ケアを渡す場合にのみ、エンティティに値を割り当てることができますuが置かれ、必要なすべての制約を満たす値を渡すように注意しなければなりませんあなたのエンティティでは –

+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

ありがとう、ムハンマド。これは私が欲しかったものではありませんが、私に素晴らしいアイデアをくれました! –

関連する問題