2011-06-08 81 views
1

我有一個應用程序,使用EF加載所有預期的數據,但是,當涉及到保存時,我根本無法使它工作。SaveChanges不保存更改

我已經開始簡單了,只需使用組合框中的值來更改數據庫中的1字段即可。當值發生變化時,它執行

this.t.Incident.AssignedTeamID = (int)this.cbTeam.SelectedValue; 

我也確認這改變了EntityStateModified和值是什麼,我希望它是。儘管如此,呼叫

hdb.SaveChanges(); 

不保存任何東西回數據庫。我知道這可能是我錯過的簡單東西,但我無法找出那是什麼。

更新:「一個實體對象不能被IEntityChangeTracker的多個實例引用 使用的SaveChanges導致一個InvalidOperationException說以前添加hdb.context.Attach(this.t.Incident);

如果這有什麼差別,這是一個桌面應用程序,而不是一個Web應用程序

+0

您是否使用依賴注入? – Chev 2011-06-08 03:03:29

+0

您使用交易嗎? – 2011-06-08 07:28:52

+0

從這個錯誤信息中,我猜你會從不同於'hdb'的上下文中加載事件。那可能嗎? – 2011-06-08 09:38:28

回答

2

最有可能的,因爲你正在使用一個web應用程序,你有一個斷開obect上下文的問題。對於所有的ORM,您必須通過附加過程來更新實體。 SaveChanges永遠不會在請求/響應的兩端工作。

+0

檢查您的對象是否已附加到上下文。 – Brownman98 2011-06-08 01:13:14

+0

我已經添加了對原始問題的更新。附加對象會導致無效的操作異常 – Joeb454 2011-06-08 09:35:35

0

謝謝大家誰張貼在這裏。閱讀這些細節後,答案非常簡單。

作爲達米安對原始問題的評論,我需要做的是確保它全部來自同一個班級。 我目前在需要時創建了數據庫的私有實例,但沒有真正想到。這很好,它按我的預期加載了數據,但意味着我將通過不同的類加載大約3個不同的數據庫實例。

本質上,我試圖用另一個不同的數據庫實例保存對象。將save方法移回到它創建的類中(大概就像它本來應該一直這樣做的)來解決問題。