Azure表查询上次插入的行键

时间:2015-11-15 16:16:33

标签: azure-storage

我有以下情景

  • 网站
  • Azure Blob存储(用于图像)
  • Azure表存储(有关图像的元信息)

虽然如此 用户上传图片,我

  • 使用生成的RowKey(整数)
  • 将有关图像的信息保存到表存储
  • 将图像保存到Blob存储(图像名称=表RowKey,因为我需要知道哪个表记录属于哪个blob图像)

问题是我不知道如何获取Last Insert RowKey或最后插入的BlobName。

我需要分离的表和Blob,因为blob将移动到另一个存储,但Web应用程序仍然需要读取图像信息。

这个天蓝色的基础设施是否适合我的场景,或者我必须使用其他存储,例如DocumentDB,我相信它可以解决我的问题,因为我可以使用标准的SQL命令?

因为这是最简单的场景我可以想到我还不想拒绝Azure表。我试过像

这样的东西

var table = storageAccount.CreateCloudTableClient()。GetTableReference(" Requests");                 table.CreateIfNotExists();

            var query = new TableQuery<RequestEntity>()
                 .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "RequestEntity"))
                 .Max(r => r.RowKey);
            Console.WriteLine(query.ToString());
            Console.ReadLine();

但我得到的错误是

TableQuery Generic Type must provide a default parameterless constructor.

我可以获得最大值吗?而且问题是我连接到azure两次,一次用于获取最大id,第二次用新的最大id插入新行。

你怎么看?最好是尝试使用Azure Tables还是转换成DocumentDB或SQL Server?

1 个答案:

答案 0 :(得分:0)

您不能发出类似OrderBy的命令来检索插入的最后一条记录。虽然它可能不是最优雅的实现方式,但有一种解决方法。您可以设计分区键和行键,使最新记录始终显示在查询的顶部。这个blob帖子有关于如何实现这一目标的良好信息(http://blog.smarx.com/posts/using-numbers-as-keys-in-windows-azure)。然后,您可以使用LINQ查询来获取TopN,如以下文章https://msdn.microsoft.com/en-us/library/azure/dd894039.aspx

中所述