删除Azure表存储中的实体

时间:2012-03-19 12:21:13

标签: azure azure-table-storage

我正在开发一个允许使用词典的应用程序(例如英语 - 德语或国家 - 首都)。只有两个非常简单的表:

1)词典:

int Id, string Title //PartitionKey="SomeConstString", Rowkey=Id.ToString()

2)文章:

int DictionaryId, string Word, string Meaning //PartitionKey="D" + DictionaryID, Rowkey=Word

我可以添加文章,但是当我尝试删除时,我会遇到以下问题:在每个字典中都不会删除一两篇文章。相反,我得到ResourceNotFoundException。这些文章(例如俄罗斯 - 莫斯科)绝对没有什么特别之处。当我尝试添加具有相同PartitionKey和RowKey的文章时,我得到EntityAlreadyExistsException。我安装了“云存储工作室”,发现这些实体仍然在桌面上。我试图手动删除它们但在存储工作室中得到了与我在代码中获得的相同的ResourceNotFoundException。因此,如果我添加100篇文章,然后尝试删除它们(在代码或工作室中,如Ctrl + A - >删除),99(或有时98)将被删除,而其他则不会。我正在使用开发存储模拟器。以下是我删除文章的方法(我尝试了不同的方法,结果仍然相同):

public void DeleteAllArticlesFromDictionary(int dictionaryID) {
            TableServiceContext tableServiceContext = tableClient.GetDataServiceContext();            
            string partitionKey = "D" + dictionaryID;            
            Article[] articles = tableServiceContext.CreateQuery<Article>(articleTableName).Where(a => a.PartitionKey == partitionKey).ToArray();
            for (int i = 0; i<articles.Length; ++i) 
                tableServiceContext.DeleteObject(articles[i]);                     
            tableServiceContext.SaveChanges();        
        }

有人能告诉我这可能有什么问题吗? UPD :在云端正常运行

1 个答案:

答案 0 :(得分:0)

我想我发现了问题,在Word的末尾有一个空格字符(0x20,''),即RowKey。所以有人说'RowKey1'。我删除了空间,现在devstorage的一切都很好(在真实环境中这不是问题)。然而,在键内正确处理空格(比如说'行键1'可以没有错误地使用)是相当混乱的,但是如果是尾随字符(或者也许是前导)则会导致这种行为。我读过“关键字段中不允许的字符”,但那里没有提到空格。我想在将它们用作键之前我应该​​使用Trim()作为键。