azure dev storage tableclient listtables,前缀不返回条目

时间:2012-08-21 23:16:02

标签: azure azure-storage azure-storage-emulator

在dev存储下,我创建了许多表,这些表在表名中都有“myprefix”前缀。当我执行以下代码时,listtables(“myprefix”)永远不会返回一个条目:

    [ClassCleanup]
     public static void ClassCleanup()
     {
         var tableClient = _account.CreateCloudTableClient();
         foreach (var table in tableClient.ListTables("myprefix"))
         {
             tableClient.DeleteTableIfExist(table);
         }
     }

如果我使用listtables(),它会返回所有表,不确定为什么前缀重载不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为这是开发存储中的一个错误。我查看了ListTables(前缀)的代码,这是我发现的(仅粘贴ListTablesSegmentedImplCore()方法的一部分):

if (prefix != string.Empty)
            {                       
                // Append Max char to end  '{' is 1 + 'z' in AsciiTable
                string uppperBound = prefix + '{';

                query = query.Where((table) => table.TableName.CompareTo(prefix) >= 0 && table.TableName.CompareTo(uppperBound) < 0);
            }

所以正在发生的是构建一个类似的查询:

http:// [你的dev存储表端点] / devstoreaccount1 / Tables()?$ filter =(TableName ge'a')和(TableName lt'a {')

现在我们知道dev存储在后台使用SQL Server进行数据存储。如果我接受此查询并对该SQL Server数据库执行它等效,我没有得到任何结果:

SELECT TOP 1000 [AccountName]
  ,[TableName]
  ,[LastModificationTime]
  ,[ServiceMetadata]
  ,[Metadata]
  ,[SchemaXml] FROM [DevelopmentStorageDb201206].[dbo].[TableContainer]   Where [TableName] >= 'a' and [TableName] < 'a{'

我想,在此期间,您需要在结束时进行过滤。另请注意,我们在开发存储中长时间发现了另一个错误,它与表的延续令牌有关。列出表时,存储帐户中有超过1000个表,在获取开发存储中的表时,不会返回延续令牌。

希望这有帮助。