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

В настоящее время я пишу службу 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 отдельных источников данных, я хочу сохранить только идентификатор элемента в объекте "Право", а не весь объект "элемент".

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

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

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

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

Любые предложения будут ценны.

2 ответа

Чтобы иметь возможность использовать $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')?$ = Расширение товара

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

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

Другие вопросы по тегам