Пока я не смог заставить его работать, и я не уверен, почему. Мне кажется, что мне либо какая -то ошибка в .net7, либо что -то упускаю. /> < /ol>
Без объема транзакции это работает нормально, однако, при добавлении объема транзакции меня просят включить поддержку распределенных транзакций с помощью: < /p>
Код: Выделить всё
TransactionManager.ImplicitDistributedTransactions = true;исполняемый код в рабочей службе следующим образом:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
int number = 0;
try
{
while (!stoppingToken.IsCancellationRequested)
{
number = number + 1;
using var transactionScope = TransactionUtils.CreateTransactionScope();
await SaveDummyDataIntoTable2Dapper($"saved {number}").ConfigureAwait(false);
await messageSession.Publish(new MyMessage { Number = number }, stoppingToken)
.ConfigureAwait(false);
_logger.LogInformation("Publishing message {number}", number);
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
transactionScope.Complete();
_logger.LogInformation("Transaction complete");
await Task.Delay(1000, stoppingToken);
}
}
catch (Exception e)
{
_logger.LogError("Exception: {ex}", e);
throw;
}
}
< /code>
Применение транзакции создается со следующими параметрами: < /p>
public class TransactionUtils
{
public static TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
return new TransactionScope(TransactionScopeOption.Required, transactionOptions,TransactionScopeAsyncFlowOption.Enabled);
}
}
< /code>
Код для сохранения в базе данных использует простую библиотеку Genericrepository: < /p>
private async Task SaveDummyDataIntoTable2Dapper(string data)
{
using var scope = ServiceProvider.CreateScope();
var mainTableRepository =
scope.ServiceProvider
.GetRequiredService();
await mainTableRepository.InsertAsync(new MainTable()
{
Data = data,
UpdatedDate = DateTime.Now
});
}
< /code>
Я должен был использовать объем здесь, так как репозиторий обладает общего пользования, а работник - это синглтон, поэтому его нельзя вводить непосредственно. < /p>
Я пробовал стойкость с помощью EF Core, а затем, когда вы пытаетесь внести свой затем вешает).
без объема транзакции все работает нормально
Я не уверен, что (если что -то) я здесь не хватает или просто не работает в .net7?>
Подробнее здесь: https://stackoverflow.com/questions/750 ... ons-issues
Мобильная версия