JsonPatchDocument applyTo () не использует все свойства, почему? - PullRequest
0 голосов
/ 03 мая 2019

Когда я вызываю applyTo () для JsonPatchDocument, а затем сохраняю изменения, запрос, который выполняет EF, использует только recordId, coworkerId и startDate для обновления. Это НЕ с использованием поля / столбца IsActive! Почему и без этого условия я получаю исключение DbUpdateConcurrencyException, потому что число строк теперь больше 1.

    public static async Task<HttpResult> PatchRecordCoworkerAsync(MpidDbContext context, int id, JsonPatchDocument<RecordCoworker> patch)
    {
        // fetches a single row
        var recordCoworker = context.RecordsCoworkers.SingleOrDefault(m => m.Id == id && m.IsActive == true);

        patch.ApplyTo(recordCoworker);

        try
        {
            await context.SaveChangesAsync();
        }
        // exception says "Database operation expected to affect 1 row(s) but actually affected 2 row(s)"
        catch (DbUpdateConcurrencyException ex)
        {
        }

        return HttpResult.NoContent;
    }

запрос, который запускается при применении изменений патча:

SET NOCOUNT ON; ОБНОВЛЕНИЕ [Records_Coworkers] SET [StartDate] = @ p0 ГДЕ [RecordID] = @ p1 И [CoworkerID] = @ p2 И [StartDate] НЕДЕЙСТВИТЕЛЬНО; SELECT @@ ROWCOUNT;

вот модель

[Table("Records_Coworkers")]
public class RecordCoworker
{
    public RecordCoworker()
    {
        IsActive = true;
        CreationDate = DateTime.Now;
    }

    [Key]
    [Column("Record_CoworkerID")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }

    [Required]
    public bool IsActive { get; set; }
    [Required]
    public DateTime CreationDate { get; set; }

    [Required]
    [Column("RecordID")]
    public int RecordId { get; set; }
    public virtual Record Record { get; set; }

    [Required]
    [Column("CoworkerID")]
    public int CoworkerId { get; set; }
    public virtual Coworker Coworker { get; set; }
}

Есть ли способ настроить что-то по-другому, чтобы в патче использовалось свойство IsActive?

мой вызов axios выглядит следующим образом

axios.patch('/api/RecordCoworkers/' + id, [{
  'op': 'replace',
  'path': '/startDate',
  'value': value,
}]).then(function(response) {
  // Show response
  console.log(response);
}).catch(function(error) {
  // Show error
  console.log(error);
});
...