2010-09-13 66 views
2

好吧请原谅我对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,它将从表中获取所有记录。为什么这不起作用?

+0

这是一个web应用程序吗? – TalentTuner 2010-09-13 17:47:26

+0

是的这是一个web应用程序, – Sharepoint 2010-09-13 17:54:07

回答

2

这个错误来自于你已经绑定了GridView中尚未加载的一些导航属性。因此,当你调用DataBind()时,它会尝试“延迟加载”这些导航属性,并且因为这发生在ObjectContext生存范围之外(即它已经处理完毕),所以会出现此错误。

解决方案是要么“Eager Load”您的GridView在您的对象上下文中使用或禁用Lazy Loading的所有导航属性。

就你而言,我建议始终禁用延迟加载,无论您是否急于加载导航属性,因为对于像这样的Web应用程序来说这是一个很好的习惯,因为它总是禁用延迟加载。一旦禁用,您仍然可以根据需要明确加载相关数据,或者用初始查询加载它们。

This post包含有关此问题的更详细讨论以及如何禁用延迟加载。

顺便说一下,您的测试项目工作的原因是,因为您不访问那里的“未加载”导航属性,因此LazyLoading不会发生。

+0

NOPE SORRY,你是对的。谢谢:) – Sharepoint 2010-09-13 19:33:32

+0

不客气。 – 2010-09-13 19:38:26