使用ODate创建,更新,删除$ ref

时间:2019-03-11 14:26:37

标签: odata asp.net-core-webapi

在阅读了一些教程之后,我对如何使用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();
    }

我发现能够删除而不需要提供我的位置的密钥很奇怪。但是为什么不实际呢,我只有一个位置,如果要删除它,让我们这样做。我只需要对此确认一下即可。

0 个答案:

没有答案