.NET conoce de forma nativa UUID v4, también conocido como Guid.NewGuid(). Pero con la vista previa 7 obtenemos la versión 7 de UUID de forma nativa.
UUID v7 Como GUID es solo otro nombre alternativo válido para UUID, la nueva API todavía está dentro de System.Guid:
var guid = Guid.CreateVersion7();
var guidWithTimestamp = Guid.CreateVersion7(DateTimeOffset.UtcNow);
La principal ventaja es la marca de tiempo que se incluye en el UUID. ¿Por qué? Echemos un vistazo a cómo está estructurado UUID v7:
+------------------+---------------+----------------------+
| 48-bit timestamp | 12-bit random | 62-bit random |
+------------------+---------------+----------------------+
Eso da una entropía de 122 bits con 6 bits para la versión y la variante en algún punto intermedio. La principal ventaja es que puede ordenar los UUID por su momento de creación, lo que los hace más adecuados para las bases de datos que el UUID v4.
Controlar la marca de tiempo
Como el método espera un DateTimeOffset, una función de llamada puede utilizar un TimeProvider para controlar UtcNow:
var uuid = Guid.CreateVersion7(timeProvider.GetUtcNow());
timeProvider se puede recuperar a través del contenedor DI y falsificarse en escenarios de prueba.