【问题标题】:Entity Framework 4 LINQ to Entities Queries Over WCFEntity Framework 4 LINQ to Entity 通过 WCF 查询
【发布时间】:2011-01-11 11:19:30
【问题描述】:

我需要创建一个 WCF 服务来返回通过实体框架从数据库中查询的对象。我读过的大多数文章都建议我应该为每种类型的查询创建一个方法。但我认为这会导致我将创建的方法数量激增,例如:

  • GetAllCars()
  • GetCarsByBrand(字符串品牌名称)
  • GetCarsByYear(int year)
  • GetCarsByBrandAndYear(string brandName, int year)
  • GetCarsByTireSize(浮动轮胎尺寸)
  • GetCarsByEngineType(string engineType)
  • GetCarsByEngineSizeAndType(float engineSize, string engineType)
  • GetCarsByEngineSizeBetween(float lowerEngineSize, float upperEngineSize)
  • 等等..

最重要的是,如果需要一个新的查询,那么我将不得不创建一个新的方法来支持它。

必须有更好更通用的方法来做到这一点。理想的情况是客户端可以通过 LINQ 创建表达式树,通过 WCF 发送它,然后通过实体框架运行查询。然后我可以有一种方法来支持所有查询。例如:

  • QueryCars(表达式表达式)

或将表达式作为字符串发送:

  • QueryCars(字符串表达式)

开发者是如何解决这个灵活查询的问题的?

我目前正在使用 .NET 4.0。安全性并不是真正的问题,因为这只是一个内部应用程序。

【问题讨论】:

    标签: .net wcf .net-4.0 entity-framework-4 linq-to-entities


    【解决方案1】:

    您正在寻找的是WCF Data Services。它使用 OData 协议通过 Linq 查询数据。

    Stack Overflow OData service 为例:

    var query = from u in service.Users
                orderby u.Reputation descending
                select u;
    
    Console.WriteLine ("Top ten Stack Overflow users");
    foreach (var u in query.Take(10))
    {
        Console.WriteLine ("{0}: {1}", u.DisplayName, u.Reputation);
    }
    

    在上面的代码中,service.Users 的类型是IQueryable<User>,它允许您使用表达式树来查询它。

    您可以使用 LINQPad 轻松尝试 SO 服务,或者在 VS 项目中添加对服务 URL 的引用。

    【讨论】:

    • 这看起来像是我正在寻找的答案。出于好奇,在 WCF 数据服务之前如何解决这个问题?
    • 在阅读了一些关于此的内容后,我不清楚这是否也支持延迟加载。你知道是否会自动处理延迟加载吗?
    • @Mas:在此之前,它被称为 ADO.NET Data Services 或 Astoria,在此之前,Linq 不存在;)
    • @Mas:自动延迟加载服务是个坏主意。您可以在集合上使用特殊的扩展方法 Expand 或调用 LoadProperty。
    • 我通过一个例子,我看到相关对象必须从数据库中显式加载。我同意,在这种情况下延迟加载是个坏主意。
    【解决方案2】:

    根据您的描述,您不需要纯 WCF 服务,而是需要 WCF Data Services。数据服务允许您exposing IQueryable 并在客户端定义 Linq 查询。

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2011-11-29
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      相关资源
      最近更新 更多