IQueryable WebAPI服务:为什么我需要调用.ToList()?

时间:2012-02-14 06:03:00

标签: c# entity-framework-4.1 wcf-web-api

我从上周离开的开发者那里继承了这段代码。他的代码基于文章:
"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错误。

我该怎么办?

2 个答案:

答案 0 :(得分:3)

您应该能够从WCF Web API REST服务返回IQueryable<T>。我怀疑使用块导致了您的问题,因为UnitOfWork在您从此方法返回后但在可以执行实际数据库查询之前处理。添加ToList()可以解决这个问题,但正如您所指出的那样,首先将所有内容加载到内存中,因此不太理想。

答案 1 :(得分:0)

我不相信它可以通过WCF公开,这可能会进一步解释

Expose IQueryable Over WCF Service