Как мне написать OData Batch HttpFetch в Typescript? - PullRequest
0 голосов
/ 15 ноября 2018

Метод My Current (play around) не работает так, как ожидалось.Что мне действительно нужно сделать, это изменить это, чтобы сделать один запрос для группы.Я совершенно в недоумении, как это сделать, кроме как это возможно.

Вот что у меня есть:

  editBulkPlan(plans: Update<Plan>[]): Observable<Plan>[] {
    this.log("Editing a buncha plans  Plan");

    let list: Observable<Plan>[] = new Array();


    plans.forEach(x => {
      list.push(this.editPlan(this.http.patch<Plan>(this.odataUrl + "Plans(" + x.id + ")", x.changes, this.httpPatchOptions)));
    });


    return list;

    //return this.http.patch<Plan[]>(this.odataUrl + "Plans(" + plan.id + ")", plans.changes, this.httpPatchOptions);
  }

И контроллер:

    public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<Plan> plan)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        using (CreateTimedTelemetryTrace())
        {
            var entity = await DataContext.Plans.FindAsync(key);
            if (entity == null)
            {
                return NotFound();
            }

            plan.Patch(entity);

            var now = DateTime.UtcNow;
            entity.UpdatedBy = RequestContext.Principal.Identity.Name;
            entity.UpdatedAt = now;

            if (entity.TestType_Id == 0)
            {
                entity.TestType_Id = 1; // Override null/0 with N/A
            }

            try
            {
                await DataContext.SaveChangesAsync();
            }
            catch (DbUpdateException exc)
            {
                if (!PlanExists(key))
                {
                    return NotFound();
                }
                TelemetryClient.TrackException(exc);
                throw;
            }

            return Updated(entity);
        }
    }

Мне нужен только один запрос и соответствующие изменения.

...