2011-01-18 9 views
1

私の大学のプロジェクトとして.netアプリケーションを作っていて、セルフトラッキングエンティティセットに問題があります。レコードを選択してwcfサービスを通過させ、変更を加えてサーバーに再度渡します。そこで私は何が変更されたのかを比較したいので、文脈から同じレコードをもう一度選択する(これは古い値のレコードです)。その後、私はサービスを介して渡されたエンティティとコンテキストにApplyChangesを呼び出したい、とImがエラーを取得し比較した後:セルフトラッキングエンティティ

AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges.

私は(変更前と比較するために、変更後)二回同じエンティティをロードするからだと仮定します。変更を比較するための良い方法はありますか(私は別のdbテーブルで変更履歴を作成する必要があります)? 2つのクライアントが同じレコードを取得し、最初のレコードが変更されてdbに格納したい場合は、このエラーも発生しませんか?私は4.0を使用しています。

+0

DTOをWCFサービスに渡し、痛みや髪をたくさん節約できます。 –

答えて

0

これは、STEを使用する方法ではありません。 STEは多くのロジックをラップしますが、duplicate keys attached to contextは処理できません。

  • は変化を比較するためのエンティティをロードしないでください:

    だから、私は2つのソリューションを想像することができます。代わりにSavingChangesイベントを処理して(またはコンテキスト上でSaveChangesを上書きして)適用される変更をObjectStateManagerから取得するように、STEの変更を適用してください。

  • STEからの変更を適用する前に、読み込まれたエンティティをdetachに試してください。
関連する問題