fix(employees): правка сотрудника с привязкой к точке падала 500 (EF8 nav-collection)
DbUpdateConcurrencyException «0 rows affected» при PUT сотрудника, у которого есть EmployeeRetailPointAssignment. Замена nav RemoveRange+Clear+Add на ExecuteDeleteAsync по EmployeeId + DbSet.Add (как в Supplies/Enters/Losses.Update). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
24646e0649
commit
aedcd3f83a
|
|
@ -283,12 +283,15 @@ public async Task<IActionResult> Update(Guid id, [FromBody] EmployeeInput input,
|
|||
if (e.IsActive != nowActive) await SetLinkedUserActiveAsync(e.UserId, nowActive, ct);
|
||||
e.IsActive = nowActive;
|
||||
|
||||
// Replace assignments wholesale
|
||||
_db.EmployeeRetailPointAssignments.RemoveRange(e.RetailPointAssignments);
|
||||
e.RetailPointAssignments.Clear();
|
||||
// Replace assignments wholesale. ExecuteDelete + DbSet.Add вместо
|
||||
// nav-collection RemoveRange+Clear+Add: иначе EF8 путается на
|
||||
// nav-collection и UPDATE employees падает с DbUpdateConcurrencyException
|
||||
// «0 rows affected» (у сотрудника с привязкой к точке правка была
|
||||
// невозможна). Тот же паттерн, что в Supplies/Enters/Losses/Demands.Update.
|
||||
await _db.EmployeeRetailPointAssignments.Where(a => a.EmployeeId == e.Id).ExecuteDeleteAsync(ct);
|
||||
foreach (var rpId in input.RetailPointIds ?? [])
|
||||
e.RetailPointAssignments.Add(new EmployeeRetailPointAssignment
|
||||
{ OrganizationId = orgId, RetailPointId = rpId });
|
||||
_db.EmployeeRetailPointAssignments.Add(new EmployeeRetailPointAssignment
|
||||
{ OrganizationId = orgId, EmployeeId = e.Id, RetailPointId = rpId });
|
||||
|
||||
await _db.SaveChangesAsync(ct);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue