OData中的跨服务引用

时间:2016-12-30 18:26:27

标签: rest odata

我想实现一个OData v4服务,其中实体集被分组到名称空间中。由于OData URI由serviceEndpoint/entitySetName组成,而entitySetName不能包含斜杠,我想将每个命名空间实现为一个单独的服务,即:

https://www.mycompany.com/namespace1/entitySetA
https://www.mycompany.com/namespace2/entitySetB

其中namespace1和namespace2表示为单独的OData服务。这一切都很好,直到我需要从entitySetA添加一个NavigationProperty到entitySetB。是否有可能来自一个服务的实体引用另一个服务的实体用于导航属性?我是否可以看到在服务级别如何实现这一点的示例?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式实现您的Edm提供程序来实现此目的:当有调用来获取特定实体时,它应该调用相应的Edm提供程序并返回所请求的实体。 导航属性也是如此。

您可以关注this document以支持跨服务方案。

答案 1 :(得分:0)

简而言之,不,OData v4中不可能有实体从其他服务引用Entites。

为了实现我的应用程序所需的命名空间,我创建了虚拟单例实体来表示这些命名空间。对于上面的示例,我的服务不会公开任何实体集,而是公开名为namespace1(带有导航属性entitySetA)和namespace2(带有导航属性entitySetB)的两个单例。它略微滥用了实体数据模型,但是在通过直接HTTP调用和客户端消费时,用户体验非常好。