0

EntityObject の特定のプロパティで IsModified を false に設定するにはどうすればよいですか。

ここに私のコードがあります

message.To = message.To.Decrypt(encryptionKey);

ここで、message.To を IsModified= false に設定して、変更を保存している間、EF がこの列への変更を無視するようにします。

私はEF 4.0を使用しています

4

2 に答える 2

1

興味深い質問です!私が気付いた限りでは、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から除外されますUpdateSET

var entry = context.ObjectStateManager.GetObjectStateEntry(message);
entry.ChangeState(EntityState.Unchanged);

3- 以前に変更されたプロパティを除外プロパティModifiedとしてToマーク

modifiedProps.ForEach(p=> entry.SetModifiedProperty(p));

最後に変更を保存しますcontext.SaveChanges();

編集:

ステップ 1 でプロパティを除外するのを忘れていましたTo。現在は修正済み

于 2013-09-28T13:24:20.763 に答える