C# 使用我的getall方法-实体框架绑定gridview

C# 使用我的getall方法-实体框架绑定gridview,c#,entity-framework,collections,linq-to-entities,C#,Entity Framework,Collections,Linq To Entities,好的,请原谅我提到gridview 因此,我在一个名为getall()的类中使用了这个方法,它的作用是从一个特定表的实体框架模型中获取实体集合,检查该表是否存在,然后使用linq(linq to entities)进行查询。这是可行的,因为我使用了一个断点,甚至创建了一个单独的测试项目来测试它。然而,用gridview绑定它对我来说很困难 这是我使用的代码: 受保护的空心按钮2\u单击(对象 发送方,事件参数(e) 然而,我得到一个错误,说: The ObjectContext instance

好的,请原谅我提到gridview

因此,我在一个名为getall()的类中使用了这个方法,它的作用是从一个特定表的实体框架模型中获取实体集合,检查该表是否存在,然后使用linq(linq to entities)进行查询。这是可行的,因为我使用了一个断点,甚至创建了一个单独的测试项目来测试它。然而,用gridview绑定它对我来说很困难

这是我使用的代码:

受保护的空心按钮2\u单击(对象 发送方,事件参数(e)

然而,我得到一个错误,说:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection. 

我使用集合从类dcollection获取所有方法,其中一个方法是getall,它将从表中获取所有记录。为什么这不起作用?

此错误是因为您在GridView中绑定了一些尚未加载的导航属性。因此,当您调用DataBind()时,它会尝试“延迟加载”这些导航属性,当这种情况发生在您的ObjectContext活动范围之外时(即,它已经被释放),您将得到此错误。

解决方案是“急切加载”GridView正在使用的所有nav属性,或者禁用对象上下文上的延迟加载。

在您的情况下,我建议始终禁用延迟加载,而不管您是否渴望加载nav属性,因为对于这样的Web应用程序,始终禁用延迟加载是一种很好的做法。一旦它被禁用,您仍然可以根据需要显式地加载相关数据,或者通过初始查询加载它们

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


顺便说一下,您的测试项目工作的原因是因为您没有访问其中的“未加载”nav属性,因此不会发生懒散加载。

是的,这是一个web应用程序,不,对不起,您是对的。谢谢:)
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.