如何在使用ODataLib条目编写器时创建ODataNavigationLink?

时间:2014-09-01 05:57:39

标签: odata odatalib

我试图找到一个如何正确实例化ODataNavigationLink的示例,以防它非空。我发现的唯一代码示例创建了一个非扩展链接,但没有将其绑定到任何数据:

//create a non-expanded link for the orders navigation property
  writer.WriteStart(new ODataNavigationLink()
  {
      IsCollection = true,
      Name = "Orders",
      Url = new Uri("http://microsoft.com/Customer(" + 
                 dataSource.Customers.First().CustomerID + ")/Orders")
  });
  writer.WriteEnd(); //ends the orders link

所以在这里我们指定了" Orders"的链接。但是,我如何提供链接的实际值(在此示例中,链接是一个集合,但它也可以是单个条目)。当我手动编写有效负载时,我正在提供" href"具有链接条目ID的属性。我无法弄清楚ODataLib是如何完成的。

1 个答案:

答案 0 :(得分:1)

'href'属性中显示的值只显示ODataNavigationLink的Url属性,因此您可以尝试以下代码手动设置它:

//create a non-expanded link for the orders navigation property
writer.WriteStart(new ODataNavigationLink() { 
    IsCollection = true,
    Name = "Orders",
    Url = new Uri("http://microsoft.com/Orders(3)") }); 
writer.WriteEnd(); //ends the orders link

通常,导航链接应该是导航属性后面的源实体网址,请参阅here,而id应指向实际条目ID。

<强>更新

根据最新的反馈,您正在尝试编写atom spec第14.1节中所述的“链接集合”。因此,您可以尝试ODataEntityReferenceLinks类:

var referenceLink1 = new ODataEntityReferenceLink { Url = new Uri("http://host/Orders(1)") };
var referenceLink2 = new ODataEntityReferenceLink { Url = new Uri("http://host/Orders(2)") };
var referenceLink3 = new ODataEntityReferenceLink { Url = new Uri("http://host/Orders(3)") };
var referenceLinks = new ODataEntityReferenceLinks
{
    Links = new[] { referenceLink1, referenceLink2, referenceLink3 }
};
writer.WriteEntityReferenceLinks(referenceLinks);

并且有效负载将类似于:

<links xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
  <uri>http://host/Orders(1)</uri>
  <uri>http://host/Orders(2)</uri>
  <uri>http://host/Orders(3)</uri>
</links>