将Child添加到Webapi odata控制器中的现有父级

时间:2017-01-20 03:41:37

标签: post asp.net-web-api entity-framework-6 odata

我使用带有EF6的Odata Webapi,我的模型如下

public class Company
{

Public Company()
{
Products = new List<Product>();

}
[Key]
public int Id { get; set; }

[Required]
public string Name { get; set; }

public List<Product> Products { get; set; }
}
public class Product
{
    [Key]
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

}

我需要公开一个终点来将产品添加到现有公司。 终点必须如下所示。

Post: ~odata/Company(1)/Products with body as List of products json.
body:[{"Name":"Product1"},{"Name":"Product2"}]

1 个答案:

答案 0 :(得分:1)

我建议为此目的使用绑定的ODataAction。 您需要传入包含产品列表的DTO。

DTO的一个例子是:

public class CreateProductsDTO
{
 List<Product> Products { get; set; }
}

然后您需要向公司控制器注册绑定操作:

var action = builder.EntityType<Company>().Action("AddProducts");
action.Parameter<CreateProductsDTO>("Value");

在控制器中,您需要定义如下操作:

[HttpPost]
public async Task<IHttpActionResult> AddProducts([FromODataUri] Guid key, ODataActionParameters parameters)
{
  //read parameter from ODataActionParameters 
  var createProducts = parameters["Value"] as CreateProductsDTO;

  //Process information
}

对此的请求如下所示:

Post: ~odata/Company(1)/AddProducts
body:
{ "Value" : {
"Products" : 
[{"Name":"Product1"},{"Name":"Product2"}]
}
}

希望这会有所帮助。 问候, 米哈伊