如何使odata实体嵌套在XML / JSON输出中?

时间:2018-09-14 22:23:00

标签: c# odata

我正在研究使用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);

如果需要进一步澄清,请告诉我。

0 个答案:

没有答案