2016-02-19 19 views
2

我有一個TEAM模型的基本WebApi OData 4控制器,它有一個POST操作,用於向數據庫添加一個新的TEAM。WebApi OData 4,在控制器中批量插入的第二個POST端點

public async Task<IHttpActionResult> Post(USER_TEAMS userTeam) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 
     context.USER_TEAMS.Add(userTeam); 
     await context.SaveChangesAsync(); 
     return Created(userTeam); 
    } 

我想爲球隊批量插入這需要團隊的對象的列表,並將它們添加到數據庫在控制器中的另一個端點。 WebApi OData 4的最佳做法是什麼?

回答

1

OData規範包含batching概念,但對於此問題,OData action是更清晰的解決方案。該動作將被綁定到團隊實體集合,並將接受請求有效負載中的Team實體的集合。 (我在下面的代碼改變USER_TEAMSTeam。)

鑑於Team實體類型的以下簡單的定義:

public class Team 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

首先,定義在同一個控制器的操作方法,你Post方法。

[HttpPost] 
    public IHttpActionResult BulkAdd(ODataActionParameters parameters) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(); 
     } 

     var newTeams = (IEnumerable<Team>)parameters["NewTeams"]; 

     // Your data access layer logic goes here. 

     return this.StatusCode(HttpStatusCode.NoContent); 
    } 

然後在您的Web API配置代碼中聲明OData動作。

var builder = new ODataConventionModelBuilder(); 

    builder.Namespace = "TeamService"; 
    builder.EntitySet<Team>("Teams"); 
    builder.EntityType<Team>().Collection 
     .Action("BulkAdd") 
     .CollectionParameter<Team>("NewTeams"); 

注意在上面:

  • EntityTypeConfiguration<T>.Collection需要綁定動作到Team實體集(相對於單個Team實體)
  • ActionConfiguration.CollectionParameter<T>有必要指定該參數是集合(與標量對比)

在客戶端上,按如下方式調用操作。

POST http://domain/Teams/TeamService.BulkAdd 
Content-Type: application/json 

{"NewTeams": [{"Name": "Demons"}, {"Name": "Angels"}]} 
+0

感謝您的明確回答! – Ehsan

相關問題