Alternativen zur Verwendung von Max + 1 zum Erstellen benutzerfreundlicher eindeutiger Folgenummern

Ich habe die Repository-Methode in meiner asp.net mvc-Webanwendung, um automatisch eine eindeutige Sequenznummer mit dem Namen Tag zu generieren:

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

Wo die GetTagMaximumeNumber () Funktion ist:

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
           }}

Oben wird die maximale Anzahl des Tags ermittelt und 1 hinzugefügt. Anschließend wird versucht, es in der Datenbank zu speichern. Das oben Genannte funktioniert gut, aber ich bin mir sicher, dass auf dem Produktionsserver, auf dem mehrere Benutzer Datensätze hinzufügen, dieselben Tag-Nummern generiert werden und eine Ausnahme ausgelöst wird, wenn versucht wird, eine automatisch generierte Tag-Nummer hinzuzufügen, die bereits in der Datenbank vorhanden ist. Ich habe also folgende Fragen: -1

Was sind die anderen Ansätze, denen ich folgen kann, um eine Sequenznummer zu erhalten, die immer eindeutig ist.

In meinem derzeitigen Ansatz sind die Lücken in der Tag-Nummer minimal. Die Lücke tritt nur auf, wenn der Benutzer einen Datensatz löscht und seine Tag-Nummer nicht das Maximum war. Gibt es also eine Möglichkeit, dies in einem neuen Ansatz beizubehalten, sodass die Lücken minimal sind?

Danke für die Hilfe.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage