2015-03-17 1 views
0

У меня есть запрос POST, который я делаю для контроллера OData, который имеет свойства навигации, прикрепленные к сущности, и я хотел бы, чтобы все они были возвращены после разрешения POST. Вместо этого возвращаются только свойства для объекта, которые имеют столбцы в таблице БД, которые представляют этот объект.OData Post возвращает базовый объект без свойств навигации

Вот метод, который я звоню:

// POST: odata/Links 
    public async Task<IHttpActionResult> Post(Link link) 
    { 
     link.ImageId = HelperModule.GetThumb(link.WebsiteUrl, 400, 300); 
     link.CreatedOn = DateTime.Now; 

     db.Links.Add(link); 
     await db.SaveChangesAsync(); 

     /* now that we have the link saved to the database we need to add it to the attached views */ 
     foreach (BoardLink bl in link.BoardLinks) 
     { 
      bl.LinkId = link.LinkId; 
      bl.IsActive = true; 
      db.BoardLinks.Add(bl); 
     } 

     await db.SaveChangesAsync(); 

     return Created(link); 
    } 

Вот сущность:

public class Link 
{ 
    public DateTime? CreatedOn { get; set; } 

    public String Description { get; set; } 

    public String ImageId { get; set; } 

    [Key] 
    public int LinkId { get; set; } 

    public String Name { get; set; } 

    public String WebsiteUrl { get; set; } 

    /// <summary> 
    /// Last modified time for this object. 
    /// </summary> 
    [Timestamp] 
    public Byte[] TimeStamp { get; set; } 

    public ICollection<LinkGradeLevel> LinkGradeLevels { get; set; } 

    public ICollection<LinkCategory> LinkCategories { get; set; } 

    [NotMapped] 
    public List<BoardLink> BoardLinks { get; set; } 
} 

Вот таблица для лица:

Link Table

Когда я устанавливаю точка останова при возврате метода POST. Я вижу, что он имеет LinkGradeL evels, LinkCategories и BoardLinks. Эти три вышеупомянутых элемента являются навигационными свойствами. У меня есть их настроить в модели EDM, как вы можете увидеть ниже:

/// <summary> 
    /// Creates the model for odata endpoints. 
    /// </summary> 
    /// <returns>The IEdmModel for OData.</returns> 
    private static IEdmModel GenerateEdmModel() 
    { 
     var builder = new ODataConventionModelBuilder(); 
     builder.EntitySet<Board>("boards"); 
     builder.EntitySet<BoardLink>("boardlinks"); 
     builder.EntitySet<Category>("categories"); 
     builder.EntitySet<GradeLevel>("gradelevels"); 
     builder.EntitySet<Link>("links"); 
     builder.EntitySet<LinkCategory>("linkcategories"); 
     builder.EntitySet<LinkGradeLevel>("linkgradelevels"); 

     return builder.GetEdmModel(); 
    } 

Когда связь возвращается к стороне клиента не содержит ни одной из навигационных свойств и имеет только CreatedOn, описание, ImageID, LinkId, имя , WebsiteUrl и Timestamp. Почему это? Должен ли я делать что-то особенное, чтобы все это возвращалось в запросе POST?

EDIT: Я хочу отметить, что я сделал возвращаемый тип метода Link, и это не сработало и вернуло то, что я уже упоминал, уже происходит. Я также попытался возвращение следующего в конце методы текущей POST У меня есть:

return Ok(Link); 

Это также не работает, он только что вернулся один и тот же материал, что я перечислил выше.

ответ

0

Если вы запрашиваете данные у поставщика OData, вы можете включить $extend для включения ссылочных ресурсов inline. Это может быть дано неявным или явным (см. EnableQueryAttribute).

По данным POST, согласно OData specs, сервер «отправляет окончательное состояние ресурса обратно клиенту в ответ». и «Создаваемая запись может содержать ссылки на другие записи в службе».

Я предполагаю, что Microsoft читает это, поскольку возвращаемая информация - это только создаваемый объект. Чтобы снова получить полный объект, вам необходимо снова получить данные с помощью GET.

+0

Спектры имеют смысл. Однако это облом. Теперь мне нужно сделать дополнительный звонок, если я хочу придерживаться только OData. Вместо этого я мог бы использовать обычный метод ApiController, чтобы это было более эффективным. –

+0

... или вы можете создать функцию OData, которая делает что-то подобное, возможно ... –

+0

Вы говорите, как GET, который изменяет данные? Мне лично не нравится идти по этой дороге. –

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