From 1ee3c9b59851d9ce38af8aacfe3212ea43e72b5f Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 9 Oct 2026 20:48:18 +0500 Subject: [PATCH] =?UTF-8?q?fix(migration):=20import=20=E2=80=94=20ChangeTr?= =?UTF-8?q?acker.Clear=20=D0=BF=D1=80=D0=B8=20=D1=81=D0=B1=D0=BE=D0=B5=20?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=B0=20(=D1=83=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=82=D1=8C=20=D0=BA=D0=B0=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=D0=B4=20=D0=BF=D0=BE=D1=82=D0=B5=D1=80=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../Integrations/MoySklad/MoySkladImportService.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs b/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs index 368607a..e12e79f 100644 --- a/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs +++ b/src/food-market.infrastructure/Integrations/MoySklad/MoySkladImportService.cs @@ -538,13 +538,19 @@ await foreach (var p in _client.StreamProductsAsync(token, ct, includeArchived: } catch (Exception ex) { - _log.LogWarning(ex, "Failed to import MoySklad product {Name}", p.Name); - errors.Add($"{p.Name}: {ex.Message}"); + // ВАЖНО: очищаем ChangeTracker, иначе неудачный батч-SaveChanges оставляет + // «отравленные» сущности и КАЖДЫЙ следующий SaveChanges падает каскадом + // (теряется весь прогон). Теперь сбой одного товара не роняет остальные. + _db.ChangeTracker.Clear(); + var inner = ex.InnerException?.Message ?? ex.Message; + _log.LogWarning(ex, "Failed to import MoySklad product {Name}: {Inner}", p.Name, inner); + errors.Add($"{p.Name}: {inner}"); if (progress is not null) progress.Errors = errors; } } - await _db.SaveChangesAsync(ct); + try { await _db.SaveChangesAsync(ct); } + catch (Exception ex) { _db.ChangeTracker.Clear(); _log.LogWarning(ex, "Final products SaveChanges failed: {Inner}", ex.InnerException?.Message ?? ex.Message); } // Финальная проверка дубликатов штрихкодов (на всякий, если // уникальный индекс был нарушен исторически).