Есть ли способ получить функциональность генератора Sql Server 2005+ Sequential Guid без вставки записей, чтобы прочитать его обратно в оба конца или вызвать вызов win dll win? Я видел, как кто-то ответил с использованием rpcrt4.dll, но я не уверен, сможет ли это работать из моей размещенной среды для производства.
Изменить: Работа с ответом @John Boker. Я попытался превратить его в генератор GuidComb вместо того, чтобы зависеть от последнего сгенерированного Guid, кроме запуска. Это для семени вместо того, чтобы начинать с Guid.Empty, что я использую
public SequentialGuid()
{
var tempGuid = Guid.NewGuid();
var bytes = tempGuid.ToByteArray();
var time = DateTime.Now;
bytes[3] = (byte) time.Year;
bytes[2] = (byte) time.Month;
bytes[1] = (byte) time.Day;
bytes[0] = (byte) time.Hour;
bytes[5] = (byte) time.Minute;
bytes[4] = (byte) time.Second;
CurrentGuid = new Guid(bytes);
}
Я основывался на комментариях на
// 3 - the least significant byte in Guid ByteArray
[for SQL Server ORDER BY clause]
// 10 - the most significant byte in Guid ByteArray
[for SQL Server ORDERY BY clause]
SqlOrderMap = new[] {3, 2, 1, 0, 5, 4, 7, 6, 9, 8, 15, 14, 13, 12, 11, 10};
Означает ли это, что я хочу, чтобы семена гида с помощью DateTime, или похоже, что я должен делать это в обратном порядке и работать назад с конца индексов SqlOrderMap? Я не слишком беспокоюсь о том, что они будут перерывом поискового вызова в любое время, когда будет создан начальный guid, поскольку он будет возникать только во время повторного использования приложения.