我有这个方法,将从 WCF 客户端调用它,但为了我的测试,我正在使用本地“添加项目引用”。我收到的错误是在处理后无法调用 DataContext。
public IEnumerable<Server> GetServers()
{
// initialze to null
ServersDataContext sdc = null;
try
{
// get connected
using (sdc = GetDataContext())
{
// disable this deferred loading
sdc.DeferredLoadingEnabled = false;
var relations = from svr in sdc.Servers; // complex linq here
// return
return relations;
}
}
catch (Exception ex)
{
LogError(ex, "fwizs.Internal");
throw;
}
finally
{
if (sdc != null)
{
sdc.Dispose();
}
}
}
下面是我如何使用该方法,它给出了这个错误:“无法访问已处置的对象。”
if (da.GetServers()
.Select(sv => sv.ServerID == s.ServerID).Count() == 0)
{
// do work since we found it
}
在此返回的 IEnumerable 对象上使用 .Select() 方法尝试返回到数据库以进行选择。在为 WCF 序列化后,我认为这不会成为问题,但我希望我的本地测试能够正常工作。
在方法中具体化您的查询,以确保在处理数据上下文之前实际执行数据库调用。
var relations = from svr in sdc.Servers;
return relations.ToList();
我是一名优秀的程序员,十分优秀!