2011-03-18 14 views
0

変更を保存する前に、コンテキストから一部のエンティティを除外する方法を教えてもらえますか?SaveChangesからエンティティを除外する

例として、2つのエンティティアクションとユーザーがあり、ユーザーのみを保存しますか?

+0

あなたは 'User'エンティティだけを保存したいが、' Action'エンティティには変更が加えられているとしますか?そうでなければ、何も救われることを心配してはいけません。これらのエンティティをどのように変更するかについていくつかのコードを投稿できますか? –

+0

両方のエンティティを変更しましたが、ユーザーのみを保存します。 – buda

答えて

1

アクションを変更しましたが、変更したくない場合は、コンテキストから切り離したり、設定したりすることができますそれは変わらない(つまり、ハックのような)。

そのままの状態を設定する
context.Detach(action); 

context.ObjectStateManager.ChangeObjectState(action, EntityState.Unchanged); 

はあなたにもアクションとユーザーとの間の関係を変更した場合、あなたはまた、呼び出すことによって、関係の状態をreasetする必要があることに注意してくださいエンティティを取り外し

ObjectStateManager.ChangeRelationshipState

とにかく、このような状況が起こらないため、何か間違ったことをしています。保存するエンティティのみを常に変更する必要があります。何らかの理由でそれらの一部だけを修正する必要がある場合、Clonning Entityを使用してアプローチを変更し、他のコンテキストで修正することは正しいです。コンテキストは作業単位です。同じビジネストランザクションの一部であるエンティティのみを変更する必要があります。

+0

私はクローンでこれを解決しました。あなたは、この解決策が起こらないと言ったときに私は間違ったことをしていましたが、クローニングが役立ちます。 – buda

0

SaveChangesメソッドはエンティティレベルではなくコンテキストレベルで機能するため、これは不可能です。

+0

どういうわけか、オブジェクトの状態を変更しないで変更できますか? – buda

+0

私はそうは思わない。 – Femaref

0

実際には、エンティティを変更しない限り、エンティティを変更しないことをお勧めします。ただし、状態を変更することはできます。 Programming Entity Frameworkにはこれに関する詳細があります。

0

私はエンティティのコピーを作成することですべての子供(ディープコピー)のアクションを作成し、私がそれらを変更したときに私はコピーを作成しました。

0

あなたは「変更なし」ObjectStateManagerのようなので、使用する(あなたのケースでタイプActionの)変更されたオブジェクトの状態を変更することができます。

context.ObjectStateManager.ChangeObjectState(actionObject, EntityState.Unchanged); 

私はこのことができます:)

PSを願っています:

var modifiedActions = context.Actions.Where(a=>a.EntityState!=EntityState.Unchanged); 
関連する問題