EntityObject の特定のプロパティで IsModified を false に設定するにはどうすればよいですか。
ここに私のコードがあります
message.To = message.To.Decrypt(encryptionKey);
ここで、message.To を IsModified= false に設定して、変更を保存している間、EF がこの列への変更を無視するようにします。
私はEF 4.0を使用しています
EntityObject の特定のプロパティで IsModified を false に設定するにはどうすればよいですか。
ここに私のコードがあります
message.To = message.To.Decrypt(encryptionKey);
ここで、message.To を IsModified= false に設定して、変更を保存している間、EF がこの列への変更を無視するようにします。
私はEF 4.0を使用しています
興味深い質問です!私が気付いた限りでは、EF 4.0にはこれに対する簡単な解決策がありません (幸いなことに、EF の新しいバージョンではこれがうまく解決されました)。
とにかく、私はこの問題に 3 段階で取り組みます。
1-がmessage
すでにコンテキストにアタッチされていて、アタッチの時点から変更されている場合、最初にその変更されたプロパティをリストに記録します
var modifiedProps = context.ObjectStateManager.GetObjectStateEntry(message).GetModifiedProperties().Where(p=>p.Equals('To')==false).ToList();
添付されていない場合は、添付します
context.Attach(message); // the sate of the message will be UnChanged
var modifiedList = any property changed based on what you have done so far;
2- オブジェクトの状態を に変更します。このようにして、すべてのプロパティがの句UnChanged
から除外されますUpdate
SET
var entry = context.ObjectStateManager.GetObjectStateEntry(message);
entry.ChangeState(EntityState.Unchanged);
3- 以前に変更されたプロパティを除外プロパティModified
としてTo
マーク
modifiedProps.ForEach(p=> entry.SetModifiedProperty(p));
最後に変更を保存しますcontext.SaveChanges();
編集:
ステップ 1 でプロパティを除外するのを忘れていましたTo
。現在は修正済み