0

这应该是一个简单的场景 - 我有一个具有父/子关系的数据模型。例如,假设它是 Orders 和 OrderDetails - 1 Order -> many OrderDetails。

我想使用标准 DataService 通过 oData 公开模型,但有一些限制。

首先,我应该只看到我的订单。这很简单,使用 EntitySetRights.ReadSingle 和 QueryInterceptor 来确保订单实际上是我的。

到目前为止,一切都很好!但是,如何在 oData 提要中以一种我可以读取特定(读取单个)订单的 OrderDetails 而无需访问整个 OrderDetails 表的方式公开相关的 OrderDetail 记录?

换句话说,我想允许阅读我的详细信息

myUrl.com/OrderService.svc/Orders(5)/OrderDetails  <-- Good! My order is #5

但不是每个人的详细信息

myUrl.com/OrderService.svc/OrderDetails  <-- Danger, Scarry, Keep Out!

谢谢您的帮助!

4

1 回答 1

0

这就是所谓的“遏制”-您的示例在这里准确描述:http: //data.uservoice.com/forums/72027-wcf-data-services-feature-suggestions/suggestions/1012615-support-containment-hierarchical-models- in-odata?ref=title WCF 数据服务尚不支持此功能。

理论上可以使用自定义 LINQ 提供程序来实现这种限制。在您的 LINQ 实现中,您可以检测到扩展(不是那么难)并在这种情况下允许它。但是您可以阻止对实体集本身的查询(也很容易识别)。有关 LINQ 表达式外观的更多详细信息,请参阅本系列:http: //blogs.msdn.com/b/vitek/archive/2010/02/25/data-services-expressions-part-1-intro.aspx

这取决于您最初想要使用的提供程序。如果您已经有自定义提供程序,这并不难。如果您有一个基于反射的提供程序,则可以将其分层。如果你有 EF,这可能会相当棘手(不确定它是否可能)。

于 2011-03-09T17:10:04.203 回答