Рассмотрим модель ниже. Два отдельных объекта, Product и Attribute, связаны через ProductAttribute.
public class Product
{
public virtual ProductAttribute ProductAttribute { get; set; }
}
public class ProductAttribute
{
public virtual Product Product { get; set; }
public virtual Attribute Attribute { get; set; }
}
public class Attribute
{
public string Name { get; set; }
public object value { get; set; }
}
Чего я хотел бы добиться, так это создать POST Атрибута для api.com/odata/Products/Attribute, в котором создан и Атрибут, и сущность ссылки ProductAttribute. Поскольку атрибут никогда не должен существовать сам по себе, а всегда должен создаваться в контексте того, к чему он принадлежит, я хочу избегать сирот.
Однако, пытаясь реализовать такую функциональность, я не нашел способа заставить ее работать без ODataActionParameters. Я бы хотел избежать необходимости получать элемент со строковым индексом и приводить его к ожидаемому типу. Здесь довольно легко ошибиться. Я также хотел бы избежать того, чтобы потребителю моего API приходилось знать, что для некоторых сообщений POST он должен включать дополнительный JSON, поскольку ожидается сбор для ODataActionParameters.
[HttpPost]
public ActionResult<Product> PostAttribute([FromODataUri] Guid key, [FromBody] Attribute attribute)
{
// attribute is null here.
}
Я знаю, что учебники предписывают вам использовать ODataActionParameters, но я считаю этот подход очень громоздким. Есть ли способ сделать это с OData без ODataActionParameters?