Wie zu Erstellen, die Deterministisch, Guids

In unserer Anwendung, die wir erstellen Xml-Dateien mit einem Attribut, das ein Guid-Wert. Dieser Wert, der benötigt wird, um Einklang zwischen Datei-upgrades. Also, auch wenn alles andere in der Datei ändert, wird der guid-Wert für das Attribut unverändert bleiben sollten.

Eine offensichtliche Lösung war es, ein statisches Wörterbuch mit dem Dateinamen und die Guids werden für Sie verwendet werden. Dann wenn wir die Datei zu erstellen, suchen wir das Wörterbuch für den Dateinamen und verwenden Sie den entsprechenden guid. Aber das ist nicht machbar, da wir vielleicht skalieren zu 100 Dateien und nicht pflegen wollen große Liste von guids.

Also ein anderer Ansatz war, um die Guid der gleichen auf der Grundlage der Pfad der Datei. Seit unserem Datei-Pfade und-Anwendung-Verzeichnis-Struktur sind einzigartig, die Guid muss eindeutig sein, der Pfad. Also jedes mal, wenn wir ein upgrade erhalten haben, erhält die Datei den gleichen guid basierend auf seinem Weg. Ich fand eine Coole Art zu erzeugen solcher 'Deterministische Guids' (Dank Elton Stoneman). Im Grunde bedeutet dies:

private Guid GetDeterministicGuid(string input) 

{ 

//use MD5 hash to get a 16-byte hash of the string: 

MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider(); 

byte[] inputBytes = Encoding.Default.GetBytes(input); 

byte[] hashBytes = provider.ComputeHash(inputBytes); 

//generate a guid from the hash: 

Guid hashGuid = new Guid(hashBytes); 

return hashGuid; 

} 

So erhält eine Zeichenkette, die Guid wird immer die gleiche sein.

Gibt es noch andere Ansätze oder empfohlenen Möglichkeiten, dies zu tun? Was sind die vor-oder Nachteile der Methode?

InformationsquelleAutor Punit Vora | 2010-04-15

Schreibe einen Kommentar