fix(migration): import — ChangeTracker.Clear при сбое товара (устранить каскад потери прогона)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
99c2fc1e5a
commit
1ee3c9b598
|
|
@ -538,13 +538,19 @@ await foreach (var p in _client.StreamProductsAsync(token, ct, includeArchived:
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_log.LogWarning(ex, "Failed to import MoySklad product {Name}", p.Name);
|
// ВАЖНО: очищаем ChangeTracker, иначе неудачный батч-SaveChanges оставляет
|
||||||
errors.Add($"{p.Name}: {ex.Message}");
|
// «отравленные» сущности и КАЖДЫЙ следующий 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;
|
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); }
|
||||||
|
|
||||||
// Финальная проверка дубликатов штрихкодов (на всякий, если
|
// Финальная проверка дубликатов штрихкодов (на всякий, если
|
||||||
// уникальный индекс был нарушен исторически).
|
// уникальный индекс был нарушен исторически).
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue