2013-03-18 123 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()火了一个新的上下文