在dev存储下,我创建了许多表,这些表在表名中都有“myprefix”前缀。当我执行以下代码时,listtables(“myprefix”)永远不会返回一个条目:
[ClassCleanup]
public static void ClassCleanup()
{
var tableClient = _account.CreateCloudTableClient();
foreach (var table in tableClient.ListTables("myprefix"))
{
tableClient.DeleteTableIfExist(table);
}
}
如果我使用listtables(),它会返回所有表,不确定为什么前缀重载不起作用。有什么建议吗?
答案 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个表,在获取开发存储中的表时,不会返回延续令牌。
希望这有帮助。