Как создать ODataNavigationLink при использовании записи 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

Поэтому здесь мы указываем ссылку на "Заказы". Но как мне предоставить фактические значения для ссылки (в этом примере ссылка представляет собой коллекцию, но она также может быть отдельной записью). Когда я писал полезные данные вручную, я предоставлял атрибут "href" с идентификатором связанной записи. Я не могу понять, как это сделать с ODataLib.

1 ответ

Решение

Значение, отображаемое в атрибуте 'href', просто показывает свойство Url 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/Orders(3)") }); 
writer.WriteEnd(); //ends the orders link

Как правило, навигационной ссылкой должен быть URL-адрес исходного объекта, за которым следует свойство навигации, см. Здесь, а идентификатор должен указывать на реальный идентификатор записи.

обновлено:

Согласно последним отзывам, вы пытаетесь написать "Сборник ссылок", как описано в разделе 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>
Другие вопросы по тегам