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.

questionAnswers(2)

yourAnswerToTheQuestion