【发布时间】:2015-03-17 23:55:24
【问题描述】:
我有一个向 OData 控制器发出的 POST 请求,该控制器具有附加到实体的导航属性,我希望在 POST 解析后返回所有这些。相反,仅返回在 DB 表中具有表示该实体的列的实体的属性。
这是我调用的方法:
// 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 方法的返回上设置断点时,我可以看到它设置了 LinkGradeLevels、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、Description、ImageId、LinkId、Name、WebsiteUrl 和 Timestamp。为什么是这样?我是否必须做一些特别的事情才能使其全部在 POST 请求中返回?
编辑:我确实想指出,我已将方法的返回类型设为 Link,但它不起作用并返回了我提到的已经发生的事情。我还尝试在我拥有的当前 POST 方法的末尾返回以下内容:
return Ok(Link);
这也不起作用,它只是返回了我上面列出的相同内容。
【问题讨论】:
标签: c# entity-framework asp.net-web-api odata