У меня есть метод ниже, и когда запускается сохранение изменений, Entity Framework пытается обновить более одной строки? Даже если я изменяю дату только для одной записи и выбираю одну запись для изменения.
Error
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: ожидается, что операция с базой данных повлияет на 1 строку (и), но фактически повлияет на 2 строку (и). Данные могут быть изменены или удалены с момента загрузки объектов.
Метод
public static async Task<HttpResult> PostRecordCoworkerStartDateAsync(MpidDbContext context, int id, RecordCoworker recordCoworker)
{
// just testing to see how many are returned
int testCount = context.RecordsCoworkers.Where(m => m.Id == id && m.IsActive == true).ToList().Count();
RecordCoworker recordCoworkerToUpdate = context.RecordsCoworkers.SingleOrDefault(m => m.Id == id && m.IsActive == true);
recordCoworkerToUpdate.StartDate = recordCoworker.StartDate;
try
{
await context.SaveChangesAsync();
} catch(Exception ex)
{
var i = ex;
}
return HttpResult.NoContent;
}
Каким-то образом, когда запрос запускается, он удаляет параметры, которые должны корректно обновляться, например. Поле IsActive. Я захватил запрос ниже.
SET NOCOUNT ON;
UPDATE [Records_Coworkers] SET [StartDate] = @p0
WHERE [RecordID] = @p1 AND [CoworkerID] = @p2;
SELECT @@ROWCOUNT;
По сути, я просто хочу обновить одну запись, в которой «IsActive» имеет значение true. Но запрос, поскольку он удаляет свойство IsActive, попытается обновить две или более строки.