ВОПРОСЫ -
- Нужно ли мне это делать? использовать токен отмены транзакции?
- Если да, что мне делать, если выдается исключение базы данных?
- Это лучший способ обновить большое количество строк (пример 500)?
var transfers = new List();
await foreach (BalanceTransaction balTransaction in service.ListAutoPagingAsync(listOptions, requestOptions))
{
var charge = (Stripe.Charge)balTransaction.Source;
transfers.Add((charge.SourceTransferId, balTransaction.ExchangeRate, balTransaction.Amount, balTransaction.Currency, stripePayoutId));
}
CancellationToken cancellationToken = new CancellationToken();
using var transaction = await _dbContext.Database.BeginTransactionAsync(cancellationToken);
try
{
foreach (var transfer in transfers)
{
var stripeTransfersResult = await _dbContext.StripeTransfers
.Where(p => p.TransferId == transfer.Item1)
.ExecuteUpdateAsync(setters => setters
.SetProperty(p => p.ExchangeRate, transfer.Item2)
.SetProperty(p => p.ExchangeAmount, transfer.Item3)
.SetProperty(p => p.ExchangeCurrency, transfer.Item4)
.SetProperty(p => p.StripePayoutId, transfer.Item5)
.SetProperty(p => p.EditedDate, DateTime.UtcNow)
);
}
await transaction.CommitAsync(cancellationToken);
}
catch (DbException ex)
{
// rollback if error
await transaction.RollbackAsync(cancellationToken);
_logger.LogInformation("Results not saved when associating payout with transfers. Stripe Payout Id: " + stripePayoutId);
_emailService.SendEmailMessage(EmailType.Exceptions, "ReconcileTransferQueue Exception", "Exception thrown when associating payout with transfers.
Stripe Payout Id: " + stripePayoutId + "
Exception:
" + ex.ToString(), true);
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... pdateasync
Мобильная версия