在 Windows Azure 表存储中,没有允许自动递增 ID 的“类型”。我以为我可以使用“IsIdentity”,但该复选框呈灰色(这应该让我自动递增,对吧?)。
有人可以告诉我如何获得自动递增字段或解决方法吗?
谢谢!
最佳答案
除非由于某种原因,您实际上需要单调递增的数字键,否则使用 DateTime.UtcNow.Ticks.ToString()
是通常的方法。 (由于Table Storage上的PartitionKey值为字符串,需要进行转换。)
这种方法的优点是表存储行会自动按 PartitionKey(然后按 RowKey)排序,因此您将按照插入的顺序返回行,就像 SQL Server 中的 IDENTITY 列一样.
如果您希望返回最近的记录,请改用 (long.MaxValue - DateTime.UtcNow.Ticks).ToString()
。
请注意,第一种方法将给出接下来 1158 年的 18 位数字。如果您想避免 Y3160 错误,请考虑用前导零填充该值 (DateTime.UtcNow.Ticks.ToString("0000000000000000000")
)。
第二种方法确实会给出一个很长一段时间的 19 位数字,远远超过 DateTime.MaxValue,所以你可能没问题。
还请记住,通过负载平衡等,如果两个服务器同时创建记录,则获得重复记录的可能性非常小,因此您应该具有增加键值的重试语义减一。
关于sql - 避免 Windows Azure 中的主键重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334012/