我使用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示例办法 ?
哪个更易于实施?
答案 0 :(得分:1)
Edmunds示例侧重于对您无法控制的HTTP服务的客户端查询。
在这种情况下,听起来你更喜欢在你控制的服务器上发生所有事情......包括对WCF服务的任何副作用。这也是我的偏好......虽然我不知道做出判断所需的细节。
如果我在获取单个Person
时只需要相关的Contract
,我想我会让我的Web API操作方法返回一个完全由服务器组成的Contract
图表(包括我通过WCF服务在服务器上获取的Person
。
但是,您可能会在一次调用中考虑需要许多Contract
个实体的客户端 - 每个实体都扩展了相关的Person
个实体。当您询问将IQueryable
放在方法上时,这就是您的意思吗?
如果是这样,我仍然会考虑在服务器上完全编写这些内容 - 通过旁路来获取相关的Person
对象 - 然后可能将生成的集合转换为IQueryable
,以便客户可以过滤。啊。我怀疑IQueryable
不明智; IEnumerable
可能更好。您仍然可以将一些过滤值传递给Web API方法(请参阅EntityQuery.withParameters
)。