2013-03-18 139 views
5

我一直在調試這個程序沒有任何結果,不幸的是我看不到問題的根源。我得到這個異常:ObjectContext實例已經被處置,不能再被用於需要連接的操作。實體框架 - objectcontext處置異常

有2個表: - CustomerSet - OrderSet

在訂單表名爲CUSTOMER_ID字段確保表之間的關係,並且存在被稱爲客戶的訂單表以及虛擬導航屬性。

的情況如下: 我插入一個元素到Orders表:

Order order = new Order(); 
Order.order_id = GenerateId(IdType.Order); 
Order.date = DateTime.Now; 
Order.Customer_id = GetCustomerId(tbCustomerName.Text); 
Insert(order); 

內插入方法存在的DbContext在using語句,所以需要時它會自動處理。我在裏面工作。

之後,我需要先前插入的元素的數據(例如,我需要Customer字段的一些屬性)。 而現在我希望客戶字段有值:

Order o = GetOrder(order.order_id); 

而且我得到了這個Ø在客戶現場異常:o.Customer投擲型「System.ObjectDisposedException」

的例外

我在玩懶惰加載,打開或關閉,但我沒有工作。情況是一樣的...

我該怎麼弄?

什麼是真正的好處在於,如果我按照F11一步步走,它通常會正常工作!

請幫忙!先謝謝你。

+0

您需要發佈您的代碼的一些細節,沒有怎麼認識當你獲得DbContext對象時,不可能知道發生了什麼。 – 2013-03-18 19:53:55

回答

4

內插入方法存在的DbContext在using語句,所以需要

不正是「需要的時候」的時候,它會自動處理。一旦它超出了using塊的範圍,它就立即在上下文對象上調用IDisposable.Dispose()

在那之後,我從先前插入的元件

你的上下文被設置在這一點上需要的數據。如果您的操作需要延遲加載,那麼會失敗,因爲上下文不可用於執行延遲加載。

如果您通常需要訪問尚未加載的對象,那麼當您檢索對象圖的其餘部分時,最有效的方法可能是使用.Include加載它。這就是所謂的急切加載。

如果偶爾需要訪問在加載對象圖的其餘部分時未加載的對象,則需要新的上下文。

對於加載相關對象的討論,我建議

http://msdn.microsoft.com/en-us/data/jj574232.aspx

+1

好吧,這包括成功解決了這個問題。酷功能。非常感謝! – 2013-03-18 21:19:48

0

如果你有內Insert using語句,則上下文不見了。

這很好,只要你確保爲一體的Insert()order.order_id部分獲得新的ID和GetOrder()火了一個新的上下文