Службы данных WCF (OData) - расширяют свойства навигации с помощью внешнего ключа - PullRequest
1 голос
/ 03 ноября 2011

В настоящее время я пишу службу OData, основанную на наборе инструментов WCF Dataservices.

Служба предоставляет несколько объектов, пример которых приведен ниже.

public class Entitlement : IEntity
{
    #region Implementation of IEntity
    public string Id { get; set; }
    #endregion

    public string ItemId { get; set; }

    [ForeignProperty]
    public Item Item { get; set; }
}

public class Item : IEntity
{
    #region Implementation of IEntity
    public string Id { get; set; }
    #endregion

    public string ItemName { get; set; }  
}

Из-за данных, извлекаемых из 2 отдельных источников данных, я хочу сохранить толькоИдентификатор Item в объекте Entitlement, а не весь объект Item.

Это работает для таких запросов, как: Entitlement ('1') / Item, сервис понимает, что ему нужно использовать ItemId для выполненияуважать.

Однако проблема возникает, когда я пытаюсь развернуть Элемент, используя приведенное ниже право доступа к URL ('1')? $ Expand = Item

Элемент всегда возвращается как ноль, я понимаю, что этопотому что я не храню Item на объекте полномочий, но есть ли возможность заставить OData обрабатывать оператор расширения так же, как он обрабатывает проекцию?

Я пробовал Entitlement ('1')? $ select = Item, но это также возвращается как ноль.

Любые предложения будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 29 января 2014

Для использования $ expand у вашего модуля должно быть виртуальное ключевое слово в вашем связанном свойстве

public class Entitlement : IEntity
{
    #region Implementation of IEntity
    public string Id { get; set; }
    #endregion

    public string ItemId { get; set; }

    public virtual Item Item { get; set; }
}

Это позволит вам использовать опцию запроса oData $ expand

Право( '1')? $ = развернуть пункт

0 голосов
/ 11 января 2013

Чтобы развернуть объекты, на которые ссылается свойство навигации (коллекция), я думаю, что вам нужно использовать синтаксис $ links в URI.

См. Раздел 3.2 «Адресация связей между объектами» в соглашениях URI протокола OData doc .

...