私は EF4.1、RIA サービス、および Silverlight を使用しています。更新シナリオで奇妙な問題が発生しています。
ドメイン モデルは非常に単純です。RequestsとPersonsを扱います。それらは 1 対 n の関係にあります。そのため、Citizen は複数の Request を持つことができますが、実際にはアプリがそうする機能を提供していないため、これは決して発生しません。
Requestには「Urgent」というプロパティがあり、これをtrueに変更してから保存しようとしています。このメソッドを介して実際の永続化が開始されるまで、すべてがうまくいきます。
public void UpdateRequest(Request currentRequest)
{
Request original = ChangeSet.GetOriginal(currentRequest);
try
{
ObjectContext.Requests.AttachAsModified(currentRequest, original);
}
catch (Exception ex)
{
// weirdness here!
}
}
これは、RIA Services によって生成されたほとんどの標準的なメソッドです (デバッグ目的で追加した try/catch ハンドラーを除く)。その後、次のエラーが発生します。
ChangeSet を確認すると、追加する Request がないので、誤って追加したのではないと確信しています。
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
私はこれを理解していません... ObjectStateManagerには文字通り追加されたオブジェクトはありません.ChangeSetには追加されたオブジェクトがありません; これは一体どこから来ているのですか?どのプロパティが変更されているかを追跡したので、キーが上書きされたり、追加されたり、その他のファンキーになったりしていないと確信しています。
誰かがここで光を当てることができますか? これまでのところ、数日間私を夢中にさせています...