繁体   English   中英

实体框架 - objectcontext处置异常

[英]Entity framework - objectcontext disposed exception

我一直在调试这个程序没有任何结果,不幸的是我无法看到问题的根源。 我得到了这个异常:ObjectContext实例已被释放,不能再用于需要连接的操作。

有2个表: - CustomerSet - OrderSet

Orders表中名为Customer_id的字段可确保表之间的关系,并且Orders表中还有一个名为Customer的虚拟导航属性。

方案如下:我在Orders表中插入一个元素:

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

在Insert方法中,在using语句中有DBContext,因此它在需要时自动处理。 我在这里工作。

之后,我需要来自先前插入元素的数据(例如,我需要Customer字段的一些属性)。 现在我希望Customer领域有价值:

Order o = GetOrder(order.order_id);

我在Customer字段中得到了一个例外:o.Customer抛出了'System.ObjectDisposedException'类型的异常

我正在玩懒惰的装载,打开或关闭它,但我没有锻炼。 情况是一样的......

我该弄什么?

真正的好处在于,如果我一步一步地使用F11,它通常可以正常工作!

请帮忙! 先感谢您。

在Insert方法中,在using语句中有DBContext,因此它在需要时自动处理

不完全“需要时”。 一旦它超出using块的范围,它就会在上下文对象上调用IDisposable.Dispose()

之后,我需要来自先前插入元素的数据

此时您的上下文已被处理。 如果您的操作需要延迟加载,那么将失败,因为上下文不可用于执行延迟加载。

如果您通常需要访问尚未加载的对象,则最有效的方法可能是使用.Include在您检索对象图的其余部分时加载它。 这被称为急切加载。

如果在加载对象图的其余部分时偶尔需要访问未加载的对象,则需要新的上下文。

有关加载相关对象的讨论,我建议

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

如果在Insert有using语句,则上下文消失。

只要你确保作为Insert() order.order_id得到新的Id并且order.order_id GetOrder()激活一个新的上下文,那order.order_id了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM