3

在 Windows Azure 表存储中,没有允许 ID 自动递增的“类型”。我以为我可以使用“IsIdentity”,但复选框是灰色的(这应该让我自动递增,对吧?)。

有人可以告诉我如何获得自动递增字段或解决方法吗?

谢谢!

4

1 回答 1

7

除非出于某种原因,您实际上需要单调递增的数字键,否则使用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,所以你可能在那里没问题。

还要记住,通过负载平衡等,如果两台服务器同时创建一条记录,您获得重复记录的可能性非常小,因此您应该具有将键值增加一的重试语义。

于 2012-09-08T21:11:09.897 回答