ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 实体框架 – objectcontext处置异常

2019-05-20 12:53:35  阅读:288  来源: 互联网

标签:c frameworks entity objectcontext objectdisposedexception


我一直在调试这个程序没有任何结果,不幸的是我无法看到问题的根源.我得到了这个异常: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,它通常可以正常工作!

请帮忙!先感谢您.

解决方法:

Within the Insert method there is DBContext in a using statement, so it automatically dispose when needed

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

After that, I need data from the previously inserted element

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

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

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

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

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

标签:c,frameworks,entity,objectcontext,objectdisposedexception
来源: https://codeday.me/bug/20190520/1143057.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有