Когда я вызываю 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);
});