【发布时间】:2014-01-06 01:15:57
【问题描述】:
目前,我们正在评估是否应该将 WCF 数据服务用作我们的应用程序的 DAL,并且我正在做一个 POC 以查看 WCF 数据服务是否适用于我们所有的场景。如果我有如下数据模型
并且我想获取 ID 为 1 的人订购的所有产品 > 100 美元,我将如何使用 Linq to OData 进行操作,因为在使用 OData 时对 Linq 运算符有很多限制。
dbContext.LineItems.Where(li => li.Order.PersonId == 1 && li.Product.Cost >
120).Select( li => new { Product = li.Product})
上面的代码在 Sql 服务器上生成非常模糊的 T-SQL,理想情况下,我想从上到下钻取(如果使用 LINQ 查询或直接 T-SQL,则从订单到产品)连接表,但似乎总是使用 OData从下到上,我感觉不太舒服,并且在某些情况下,当我们必须在单个查询中查询两个以上的表时,会生成非常糟糕的 sql。
在我们的应用程序中,我们期待这样的场景,我们必须在单个查询中查询(写入条件)多达 4 个表并选择单个实体。对于这类复杂的查询,OData 是否正确?
感谢您阅读这么长的帖子。
【问题讨论】:
-
通过 WCF 执行复杂查询是个坏主意,并且可能意味着您的域模型过于细化。如果您的模型不好,OData 是否可以执行复杂的查询是无关紧要的。您应该只公开实现场景所需的实体,而不是详细的数据库架构
-
@PanagiotisKanavos 我确信我们的数据库非常规范化(我假设这是正常的数据库设计),表之间的关系很复杂,我相信我们最终会遇到表 A 的主键和我们必须通过从表 A - 表 B - 表 C - 表 D 中获取表 D 中的数据,其中表之间的关系可以是 1-1、1-* 或 Many - many ,所以我正在争论是否 OData(WCF数据服务)在这种情况下是一个不错的选择,因为我们的架构师建议将 WCF 数据服务作为数据访问层(访问数据库的唯一方法,不能直接使用 EF)。
标签: sql linq odata wcf-data-services