Post 向Webapi odata控制器中的现有父级添加子级

Post 向Webapi odata控制器中的现有父级添加子级,post,asp.net-web-api,entity-framework-6,odata,Post,Asp.net Web Api,Entity Framework 6,Odata,我将ODataWebAPI与EF6一起使用,我的模型如下 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; } } publi

我将ODataWebAPI与EF6一起使用,我的模型如下

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

}

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

DTO的一个例子是:

public class CreateProductsDTO
{
 List<Product> Products { get; set; }
}
希望这有帮助。 当做
Mihai

感谢您的快速响应,Mihai,我应该在哪里添加此行var action=builder.EntityType.ActionAddProducts;动作参数值;是在针对ODataConventionModelBuilder还是DBModelbuilder的WebapiConfig注册方法中。RegisterEntityType whole OnModelCreating.hi,我应该有绑定操作。我正在使用System.Web.Http.OData.Builder,但我没有Builder.EntityType。如果我使用System.Web.OData.Builder,我无法将“Microsoft.OData.Edm.IEdmModel”转换为“Microsoft.Data.Edm.IEdmModel”,您好,您是对的,这应该放在ODataConventionModelBuilder中,您使用的是什么版本的OData?不知道这是否有帮助,但我在这里发布了类似的情况。
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"}]
}
}