我从上周离开的开发者那里继承了这段代码。他的代码基于文章:
"Restful WCF / EF POCO / UnitOfWork / Repository / MEF"
此方法有效(当我浏览http://myapp/myservice/Returns时):
[WebGet(UriTemplate = "Returns")]
public IQueryable<ReturnSnapshot> GetReturnSnapshots()
{
using (UnitOfWork)
{
ReturnSnapshotsRepository.EnrolInUnitOfWork(UnitOfWork);
return ReturnSnapshotsRepository.FindAll().ToList().AsQueryable();
}
}
但ToList()
不会导致整个表从存储库中拉出来吗?我们将生产500K +行。
我以为我可以将最后一行更改为:
return ReturnSnapshotsRepository.FindAll();
,FindAll
返回IQueryable。但是,我的更改破坏了服务,现在出现HTTP 12152错误。
我该怎么办?
答案 0 :(得分:3)
您应该能够从WCF Web API REST服务返回IQueryable<T>
。我怀疑使用块导致了您的问题,因为UnitOfWork在您从此方法返回后但在可以执行实际数据库查询之前处理。添加ToList()
可以解决这个问题,但正如您所指出的那样,首先将所有内容加载到内存中,因此不太理想。
答案 1 :(得分:0)
我不相信它可以通过WCF公开,这可能会进一步解释