gpt4 book ai didi

c# - ObjectContext 实例已被释放,不能再用于需要连接的操作

转载 作者:太空狗 更新时间:2023-10-29 22:04:17 26 4
gpt4 key购买 nike

我正在开发 WCF 数据服务。当我尝试从客户端访问它时,出现此异常:

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

代码:

[WebGet]
public IQueryable<Student> GetUsersByClassId(string classId)
{
Check.Argument.IsNotEmptyOrNull(classId, "classId");

using (var db = new schoolContext(connectionString))
{
((IObjectContextAdapter)db).ObjectContext.ContextOptions.ProxyCreationEnabled = false;
((IObjectContextAdapter)db).ObjectContext.ContextOptions.LazyLoadingEnabled = false;

var studentQry = from s in db.Student.Include("Class")
where s.Class.Id == classId
select s;

if(studentQry == null)
return new List<Student>().AsQueryable();
else
return studentQry;
}

最佳答案

我怀疑问题出在标记为 ... 的代码中,你没有显示。

请务必在返回查询之前全面评估您的查询。例如,不只是做:

return studentQry;

尝试做:

return studentQry.ToList();

编辑:

现在您已经更改了问题以反射(reflect)您正在返回 IQueryable<T>而不是 IEnumerable<T> , 有一个单独的问题。通过返回 IQueryable<T>从您的方法中,您建议可以直接在服务器端“查询”该类型。

但是,WCF 正在通过网络对其进行序列化,并且需要使用具体的实现类型。 IEnumerable<T>允许,但不允许 IQueryable<T> .您应该将其切换为可进行全面评估的类型,以便正确传递结果。

关于c# - ObjectContext 实例已被释放,不能再用于需要连接的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com