У меня есть запрос 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; }
}
Вот таблица для лица:
Когда я устанавливаю точка останова при возврате метода 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);
Это также не работает, он только что вернулся один и тот же материал, что я перечислил выше.
Спектры имеют смысл. Однако это облом. Теперь мне нужно сделать дополнительный звонок, если я хочу придерживаться только OData. Вместо этого я мог бы использовать обычный метод ApiController, чтобы это было более эффективным. –
... или вы можете создать функцию OData, которая делает что-то подобное, возможно ... –
Вы говорите, как GET, который изменяет данные? Мне лично не нравится идти по этой дороге. –