Создать, обновить, удалить $ ref с ODate - PullRequest
5 голосов
/ 11 марта 2019

После прочтения нескольких уроков у меня есть хорошая идея, как реализовать API Rest с OData.Я могу создавать, обновлять и удалять сущности и связывать существующие сущности с коллекцией сущностей.Но что, если моя сущность просто содержит другую сущность.

Пример, допустим, у меня есть курс

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();
    }

Мне кажется странным, что можно удалить без указания ключа моего местоположения.Но почему бы и нет, у меня есть только одно местоположение, если я хочу его удалить, давайте сделаем это.Мне просто нужно подтверждение по этому поводу.

...