2013-03-13 10 views
5

エンティティオブジェクトをロードし、以前と同じ値にプロパティの1つを割り当てると、フレームワークは変更を検出しますか、とにかくIsModifiedフラグをtrueに設定しますか?私はそのフィールドの全体のエンティティのためにと、IsModifiedフラグを設定し、それらのイベントのどれか分からないエンティティフレームワークは、IsModifiedフラグを決定するために、割り当てられた値をオリジナルと比較しますか?

OnNameChanging(value); 
ReportPropertyChanging("Name"); 
_Name = StructuralObject.SetValidValue(value); 
ReportPropertyChanged("Name"); 
OnNameChanged(); 

これは次のようにフィールド名の生成されたコードがどのように見えるかです。

+0

ただ試してみてください。 –

答えて

3

あなたのコンテキストは、あなたのデータが変更された場合にのみ記録されます。

private void CheckIfDifferent(DbEntityEntry entry) 
    { 
     if (entry.State != EntityState.Modified) 
      return; 

     if (entry.OriginalValues.PropertyNames.Any(propertyName => !entry.OriginalValues[propertyName].Equals(entry.CurrentValues[propertyName]))) 
      return; 

     (this.dbContext as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity).ChangeState(EntityState.Unchanged); 
    } 

ソース:あなたはこのようなチェックを行うことができます

https://stackoverflow.com/a/13515869/1339087

+1

「データが変更された場合のみ、それが異なる場合ではない」とはどういう意味かはわかりません。あなたは明確にしてください。 – alpav

+2

データが変更された場合にのみ、値がまったく変更された場合でも、元の値に戻っても意味があります。 – Nikos

2

を物事が今(EF6)異なっているように見えます。私はこれを調べて、 "新しい値"が異なるかどうかを知るためにプロパティ値を設定するときにifステートメントを使う必要があるかどうかを調べました。私は次のようにテストしました。エンティティは変更されているとマークされていません。

関連する問題