绑定GridView与我的getall方法 - 实体框架
好吧请原谅我对gridview的引用。绑定GridView与我的getall方法 - 实体框架
所以我在一个名为getall()的类中使用了此方法,它从specfic表的实体框架模型获取entites的集合,检查表是否存在,然后使用linq(linq到实体)。这确实有效,因为我已经使用了一个断点,甚至创建了一个单独的测试项目来测试它。但是,使用gridview绑定它对我来说已经证明很困难。
这是我使用的代码:
保护无效Button2_Click(对象 发件人,EventArgs的)
{ dCollection d = new dCollection(); GridView1.DataSource = d.GetAll(); GridView1.DataBind(); }
不过,我得到一个错误说:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
我正在使用一个集合来从dco类中获取所有的方法选择和我的一个方法是getall,它将从表中获取所有记录。为什么这不起作用?
这个错误来自于你已经绑定了GridView中尚未加载的一些导航属性。因此,当你调用DataBind()时,它会尝试“延迟加载”这些导航属性,并且因为这发生在ObjectContext生存范围之外(即它已经处理完毕),所以会出现此错误。
解决方案是要么“Eager Load”您的GridView在您的对象上下文中使用或禁用Lazy Loading的所有导航属性。
就你而言,我建议始终禁用延迟加载,无论您是否急于加载导航属性,因为对于像这样的Web应用程序来说这是一个很好的习惯,因为它总是禁用延迟加载。一旦禁用,您仍然可以根据需要明确加载相关数据,或者用初始查询加载它们。
This post包含有关此问题的更详细讨论以及如何禁用延迟加载。
顺便说一下,您的测试项目工作的原因是,因为您不访问那里的“未加载”导航属性,因此LazyLoading不会发生。
NOPE SORRY,你是对的。谢谢:) – Sharepoint 2010-09-13 19:33:32
不客气。 – 2010-09-13 19:38:26
这是一个web应用程序吗? – TalentTuner 2010-09-13 17:47:26
是的这是一个web应用程序, – Sharepoint 2010-09-13 17:54:07