Alternativas para usar o Max + 1 para criar números de sequência exclusivos fáceis de usar
Eu tenho o método de repositório dentro do meu aplicativo da web asp.net mvc, para gerar automaticamente um número de sequência exclusivo chamado Tag: -
public void InsertOrUpdateServer(TMSServer server, string username)
{
if (server.TMSServerID == default(int))
{
// New entity
int technologyypeID = GetTechnologyTypeID("Server");
Technology technology = new Technology
{
IsDeleted = true,
Tag = "S" + GetTagMaximumeNumber(technologyypeID).ToString(),
StartDate = DateTime.Now,
};
Save();
//code goes here
Onde a função GetTagMaximumeNumber () é: -
public int GetTagMaximumeNumber(int typeID) {
string s = tms.Technologies.Where(a => a.TypeID == typeID).Max(a2 => a2.Tag.Substring(1));
if (s != null)
{
return Int32.Parse(s) + 1;
}
else {
return 100;//if this is the first record created
}}
O acima irá obter o número máximo da tag e adicionar 1, em seguida, tente salvá-lo no banco de dados. O acima está funcionando bem, mas tenho certeza de que no servidor de produção onde vários usuários adicionarão registros, os mesmos números de tag serão gerados e a exceção será levantada ao tentar adicionar um número de tag gerado automaticamente que já existe no banco de dados. Então eu tenho as seguintes perguntas: -1
Quais são as outras abordagens que eu posso seguir para ter um número de seqüência que é sempre exclusivo.
Na minha abordagem atual, as lacunas no número da tag são mínimas. A lacuna ocorre apenas quando o usuário exclui um registro e seu número de tag não é o máximo. Então, há uma maneira de ainda ter isso em qualquer nova abordagem, por isso as lacunas serão mínimas?
Obrigado pela ajuda.