Альтернативы использованию Max + 1 для создания удобных уникальных порядковых номеров

У меня есть метод репозитория в моем веб-приложении asp.net mvc, чтобы автоматически генерировать уникальный порядковый номер с именем 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

Где функция 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
           }}

Выше будет получено максимальное количество тегов и добавлено 1, а затем попытаться сохранить его в базе данных. Вышеописанное работает хорошо, но я уверен, что на рабочем сервере, где несколько пользователей будут добавлять записи, будут сгенерированы одинаковые номера тегов, и возникнет исключение при попытке добавить автоматически созданный номер тега, который уже существует в базе данных. Итак, у меня есть следующие вопросы: -1

Каковы другие подходы, которым я могу следовать, чтобы иметь порядковый номер, который всегда уникален.

В моем текущем подходе пробелы в номере тега минимальны. Разрыв возникает только тогда, когда пользователь удаляет запись, а ее номер тега не был максимальным. Так есть ли способ сохранить это в любом новом подходе, чтобы пробелы были минимальными?

Спасибо за помощь.

Ответы на вопрос(2)

Ваш ответ на вопрос