【问题标题】:Proper way to return IQueryable using WCF Data Service and EF使用 WCF 数据服务和 EF 返回 IQueryable 的正确方法
【发布时间】:2011-08-25 13:11:34
【问题描述】:

所以我想返回一些数据,我正在使用 WCF 数据服务和实体框架,看起来像:

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 也很好。

【问题讨论】:

    标签: entity-framework-4 wcf-data-services


    【解决方案1】:

    你不需要使用,其实最好不要使用。 WCF 数据服务将在请求结束时释放 CurrentDataSource。所以就用它吧。

    【讨论】:

    • 感谢您的回复。我一直被告知,每当有东西实现 IDisposable 时,它​​就应该被处置。您能否提供指向 DataService 如何按照您描述的方式工作的工作流程的文档链接?
    • 您需要在您的代码拥有的所有 IDisposable 实例上使用 using。数据源归数据服务对象所有。它是在创建数据服务对象后不久创建的,并在处理请求后被释放。不幸的是,我现在找不到可以描述此内容的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多