有没有办法获得 Sql Server 2005+ Sequential Guid 生成器的功能,而无需插入记录以在往返途中读回或调用本机 win dll 调用?我看到有人以使用 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 为 guid 播种的方式,还是看起来我应该反向执行并从 SqlOrderMap 索引的末尾向后工作?我不太担心它们会在任何时候创建初始 guid 时出现分页中断,因为它只会在应用程序回收期间发生。