在阅读了一些教程之后,我对如何使用OData实现Rest API有了一个好主意。我可以创建,更新和删除实体,并且可以将现有实体链接到实体的集合。但是,如果我的实体只包含另一个实体怎么办?
例如,假设我有一门课程
public class Course
{
[Key]
public Guid Id { get; set; }
public ICollection<Student> Students { get; set; }
public Teacher Teacher { get; set; }
public Location Location { get; set; }
}
public class Teacher
{
[Key]
public Guid Id { get; set; }
public ICollection<Location> Location { get; set; }
}
我应该如何实现课程控制器以链接到教师或位置。位置必须是这位老师的位置。
我只想知道我需要创建的路线
[HttpPost]
[ODataRoute("Course({key})/Location/$ref")]
[HttpPut]
[ODataRoute("Course({key})/Location({relatedKey})/$ref")]
[HttpDelete]
[ODataRoute("Course({key})/Location({relatedKey})/$ref")]
这是有关HttpPut和HttpDelete的更多信息,我有些疑问,因为我没有位置集合。因此,此处的相关键没有意义。我应该这样写我的路线吗?
[HttpPut]
[ODataRoute("Course({key})/Location/$ref")]
[HttpDelete]
[ODataRoute("Course({key})/Location/$ref")]
对吗?
编辑
此刻我的代码中已经包含了
[HttpPut]
[ODataRoute("Course({key})/Location/$ref")]
public async Task<IActionResult> UpdateLinkToLocation([FromODataUri] Guid key, [FromBody] Uri link)
{
throw new NotImplementedException();
}
[HttpDelete]
[ODataRoute("Course({key})/Location/$ref")]
public async Task<IActionResult> DeleteLinkToLocation([FromODataUri] Guid key)
{
throw new NotImplementedException();
}
我发现能够删除而不需要提供我的位置的密钥很奇怪。但是为什么不实际呢,我只有一个位置,如果要删除它,让我们这样做。我只需要对此确认一下即可。