У меня есть API, который выполняет транзакции с использованием разных провайдеров, и для каждого провайдера я обрабатываю внутренний счетчик в таблице. Проблема возникает потому, что мы получим больше трафика c и у нас будет транзакция с повторной нумерацией.
Запрос, который я использую для счетчика, следующий:
public async Task<int> GetNumeration(int id)
{
var providerNumerationDb = await _dbContextEf
.providerNumeration
.SingleOrDefaultAsync(x => x.providerId == id);
if (providerNumerationDb == null)
{
providerNumerationDb = new ProviderNumeration
{
providerId = id,
number = 1,
};
await _dbContextEf.AddAsync(providerNumerationDb);
}
else
{
providerNumerationDb.Number += 1;
}
await _dbContextEf.SaveChangesAsync(0);
_dbContextEf.Entry(providerNumerationDb).State = EntityState.Detached;
return providerNumerationDb.Number;
}
Я хочу Знайте лучшую стратегию, чтобы сделать Rowlock без последствий для производительности или другого решения. Если вы считаете, что решение лучше использовать StoredProcedure, например или другим способом, оно также допустимо, мы можем изменить реализацию.