breeze:将web api实体与第三方wcf服务相结合

时间:2013-04-30 19:56:50

标签: breeze

我使用Web API返回 Contrat EF实体以及元数据。

Contract 实体具有PersonId属性,该属性包含 Person 实体的外键。 这就是事情变得复杂的地方。

为了获得 Person 实体,我需要调用WCF服务。此服务不使用实体framekwork检索实体。实际上, Person 实体存储在Oracle数据库中。

然后在客户端,我需要将 Person 实体分配给 Contract 实体。我想我需要扩展 Contract 模型并添加 Person 类型的属性。

我一直在阅读埃德蒙兹的样本,这似乎与我正在尝试做的很接近。

我不打算直接从客户端调用WCF服务。相反,我将在我的WEB API服务中调用GetPerson方法,而后者将调用WCF服务。

所以,我的问题是:因为我可以访问Web API服务,我应该尝试返回IQueryable和元数据(对我来说很难),或者我应该只返回JSON数据并转到Edmunds示例办法 ?

哪个更易于实施?

1 个答案:

答案 0 :(得分:1)

Edmunds示例侧重于对您无法控制的HTTP服务的客户端查询。

在这种情况下,听起来你更喜欢在你控制的服务器上发生所有事情......包括对WCF服务的任何副作用。这也是我的偏好......虽然我不知道做出判断所需的细节。

如果我在获取单个Person时只需要相关的Contract,我想我会让我的Web API操作方法返回一个完全由服务器组成的Contract图表(包括我通过WCF服务在服务器上获取的Person

但是,您可能会在一次调用中考虑需要许多Contract个实体的客户端 - 每个实体都扩展了相关的Person个实体。当您询问将IQueryable放在方法上时,这就是您的意思吗?

如果是这样,我仍然会考虑在服务器上完全编写这些内容 - 通过旁路来获取相关的Person对象 - 然后可能将生成的集合转换为IQueryable,以便客户可以过滤。啊。我怀疑IQueryable不明智; IEnumerable可能更好。您仍然可以将一些过滤值传递给Web API方法(请参阅EntityQuery.withParameters)。