2013-06-16 4 views
0

Следующий код преобразует запрос ViewModel в модель и затем преобразует возвращаемый результат обратно в ViewModel как PageResult. Все это прекрасно работает, но когда я пытаюсь использовать include, как часть моего запроса по умолчанию (или даже с последней версией как часть querycontext), формамер OData играет смешно и не включает дочерние элементы. Я отлаживал и подтверждал, что на самом деле он содержит дочерние элементы. Это происходит только для контроллеров, которые я расширил с ODataController (так что в основном для тех, которые расширены из ApiController, все работает отлично, но мне нужны результаты в формате OData). Обратите внимание, что я также пробовал с помощью новейшей ночной сборки (Microsoft.Data.OData 5.5.0.0), и все же это не работает для меня. Любая помощь будет высоко оценена.Форматирование WebApi OData не работает для дочерних элементов

public class ProductsController : ODataController 
    { 
     APPContext context = new APPContext(); 

     public PageResult<ProductViewModel> Get(ODataQueryOptions QueryOptions) 
     { 
      EdmModel model = new EdmModel(); 
      ODataQueryContext queryContext = new ODataQueryContext(model.GetEdmModel(), typeof(Product)); 
      var mappedQuery = new ODataQueryOptions(queryContext, QueryOptions.Request); 
      var results = new List<ProductViewModel>(); 

      foreach (var result in mappedQuery.ApplyTo(this.context.Serials.Include("Status").Include("Category"))) 
      { 
       AutoMapper.Mapper.CreateMap(result.GetType(), typeof(ProductViewModel)); 
       results.Add(AutoMapper.Mapper.Map<ProductViewModel>(result)); 
      } 

      PageResult<ProductViewModel> pr = new PageResult<ProductViewModel>(results.AsEnumerable<ProductViewModel>(), mappedQuery.Request.GetNextPageLink(), mappedQuery.Request.GetInlineCount()); 
      return pr; 
     } 
    } 

ответ

1

В объектах, связанных с OData, представлены как ссылки для навигации. Итак, если у вас есть фид клиентов, соответствующие заказы для каждого клиента не будут частью фида клиентов. Вместо этого они будут представлены в виде навигационных ссылок. Вы можете явно указать службе OData развернуть связанные объекты, используя опцию запроса $expand. Итак, если вы хотите, чтобы соответствующие заказы для каждого клиента были расширены, вы должны запросить URL-адрес ~/Customers?$expand=Orders.

+0

** или даже с последней версией как часть querycontext ** На самом деле я имел в виду $ expand здесь. Я заранее извиняюсь за то, что не был конкретным. –

Смежные вопросы