2012-09-08 105 views
2

在Windows Azure表存儲中,不存在允許自動遞增ID的「類型」。我以爲我可以使用'IsIdentity',但複選框變灰(這應該讓我自動遞增,對吧?)。避免Windows Azure中的主鍵重複

有人可以告訴我如何可以得到一個自動遞增字段或解決方法嗎?

謝謝!

回答

7

除非由於某些原因,您實際上需要單調遞增的數字鍵,否則使用DateTime.UtcNow.Ticks.ToString()是常用方法。 (因爲表存儲上的PartitionKey值是一個字符串,所以需要將其轉換。)

此方法的優點是表存儲行由PartitionKey(然後由RowKey)自動排序,將按照它們插入的順序重新獲取行,就像SQL Server中的IDENTITY列一樣。

如果您希望記錄返回最近最先的記錄,請改爲使用(long.MaxValue - DateTime.UtcNow.Ticks).ToString()

請注意,第一種方法將爲未來1158年提供一個18位數字。如果您想避免Y3160錯誤,請考慮使用前導零填充值(DateTime.UtcNow.Ticks.ToString("0000000000000000000"))。

第二種方法確實會在很長的時間內給出一個19位的數字,通過DateTime.MaxValue,所以你可能在那裏。

另外請記住,使用負載平衡等類似情況下,如果兩臺服務器在同一時間創建一條記錄,則會出現重複的可能性很小,因此應該使用重試語義來增加密鑰值一。

+0

我不明白的PartitionKey業務......本質上(據我瞭解)我使用DateTime.Utc.Now.ToString()並將其作爲字符串存儲在我的數據庫(作爲主鍵),對吧?謝謝你幽默的答案btw! – user1567095

+0

'DateTime.UtcNow.Ticks.ToString()' - Ticks屬性是重要的一點。 –

+0

太好了,謝謝! – user1567095