我正在研究使用ODATA的API。我们使用C#构建模型,并通过端点公开它们。我有一个较旧的模型,该模型可以按预期工作,并且当我命中端点时的数据如下所示:
<entry>
<id>URL</id>
<category term="WorkOrderModel" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<link rel="edit" href="<URL>" />
<link rel="self" href="<URL>" />
<content type="application/xml">
<m:properties>
<d:WorkOrderId m:type="Edm.Int32">1000</d:WorkOrderId>
<d:Assemblies m:type="Collection(AssemblyModel)">
<d:element>
<d:AssemblyId m:type="Edm.Int32">1</d:AssemblyId>
... element continued ...
</d:element>
...
我遇到的问题是我创建了一个新端点,并以旧端点为基础,但是这样做有些奇怪...而不是将嵌套实体放在模型中...它显示了要访问的端点嵌套实体(我从来没有在代码中设置这些端点,而且我不希望它们……我需要数据以与上述代码段相同的格式返回。
新端点显示返回的数据,如下所示:
<entry>
<id>URL</id>
<category term="MSProjectModel" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<link rel="edit" href="<URL>" />
<link rel="self" href="<URL>" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Assignments" type="application/atom+xml;type=feed" title="Assignments" href="ODATAURLPATH/Assignments" />
<content type="application/xml">
<m:properties>
<d:id>5b9abb4d3cd43942c4eac06b</d:id>
<d:ProjectId m:type="Edm.Guid">5a6a3f84-83b6-e611-80d1-00155d084707</d:ProjectId>
...
</m:properties>
</content>
基本上,该行不应该存在……相反,它应该是一个嵌套实体,例如第一个示例中的WorkOrderModel中的Assemblies:
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Assignments" type="application/atom+xml;type=feed" title="Assignments" href="ODATAURLPATH/Assignments" />
如何获得第二个模型,使其像第一个模型一样在返回数据中显示所有嵌套实体?
在我的WebApiConfig.cs文件中,我只是对两个模型都这样做以公开它们:
builder.EntitySet<WorkOrderModel>("WorkOrder");
IEdmModel model = builder.GetEdmModel();
config.Routes.MapODataServiceRoute("odata", "odata", model);
如果需要进一步澄清,请告诉我。