2011-08-25 71 views
1

返回所以我要回一些数据,和我使用WCF数据服务和实体框架,看起来像:有道IQueryable的使用WCF数据服务和EF

public class MyWcfDataService : DataService<MyEFModel> 
{ 
    [WebGet(ResponseFormat = WebMessageFormat.Json)] 
    public IQueryable<GetMyListEF> GetMyList() 
    { 
     using (MyEfModel context = this.CurrentDataSource) 
     { 
      return context.GetMyListEF().ToList().AsQueryable(); 
     } 
    } 
} 

正如你可以看到我'转换为列表,然后查询。如果我只投了AsQueryable(),我将无法读取数据,因为连接已关闭(由于延迟执行AsQueryable)。

所以我的问题是,有没有更好的方法?甚至需要using声明?数据有时可能是100k行,因此转换为列表会使用相当数量的内存。真正利用延迟执行并只返回一个真正的IQueryable也是很好的。

回答

1

你不需要使用,实际上最好不要使用它。 WCF数据服务将在请求结束时处理CurrentDataSource。所以就使用它。

+1

感谢您的回复。我总是被告知,只要有东西实现了IDisposable,它应该被废弃。您能否以您描述的方式提供DataService工作流程文档的链接? – Darcy

+1

您需要在您的代码拥有的所有IDisposable实例上使用using。数据源由数据服务对象拥有。它在创建数据服务对象后不久创建,并在请求处理完成后处理。不幸的是,我找不到可以描述这种情况的链接。 –