我正在使用EF4.1,RIA Services和Silverlight。我在更新場景中遇到了一些有點奇怪的問題。使用RIA服務更新實體時出現奇怪的InvalidOperationException
域模型非常簡單;它涉及請求和人。他們有一對一的關係。因此,公民可以有多個請求,但實際上這絕不會發生,因爲該應用程序根本不提供這樣做的功能。
請求有一個名爲「緊急」屬性,這是我改變真正,然後嘗試保存。一切順利的話,直到實際持續存在通過這種方法開始:(除了我添加了調試目的在try/catch處理)
public void UpdateRequest(Request currentRequest)
{
Request original = ChangeSet.GetOriginal(currentRequest);
try
{
ObjectContext.Requests.AttachAsModified(currentRequest, original);
}
catch (Exception ex)
{
// weirdness here!
}
}
這是相當多的RIA服務標準生成的方法然後我得到以下錯誤:
當我檢查的變更,有沒有請求要添加,所以我敢肯定,我不是偶然添加。
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
我不明白這一點......從字面上有在ObjectStateManager沒有添加的對象,該變更有沒有添加的對象;這是從哪裏來的?我跟蹤了哪些屬性正在更改,所以我確定密鑰不會被覆蓋,也不會被添加或其他某些時髦。
任何人都可以在這裏發光?快把我逼瘋了好幾天了那麼遠,
我不認爲這是你在其他地方加入它的問題。在執行此更新方法之前是否有可能加載實體的代碼?另一個查詢在同一往返中執行? – 2013-02-19 15:54:49
你在CallStack窗口中看到什麼?你不能追蹤持續的操作呼叫嗎? – 2013-02-19 21:34:30
正如Anthony Pegram所提到的,只要您使用相同的密鑰加載實體,就無法附加模型。這些更改必須應用於附屬實體。 – Ouarzy 2013-02-20 07:31:50