2012-03-19 69 views
0

我正在开发一个允许使用字典(例如英语 - 德语或国家/地区)的应用程序。只是有2个非常简单的表:删除Azure表存储中的实体

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。我安装了“Cloud Storage Studio”,发现那些实体还在桌面上。我试图手动删除它们,但在存储工作室中得到了与代码中相同的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:在Cloud中正常工作

+0

你可以给出具体的PartitionKey/RowKey组合不删除的例子吗?它总是有相同的行或键有问题,或者它有时是不同的行? – 2012-03-19 18:48:33

+0

我附上截图和msdn上发布的相同问题的一些额外解释。链接:http://social.msdn.microsoft.com/Forums/en-EN/windowsazuredata/thread/11f53d7f-dcb8-40bd-a372-65d90970a056 – 2012-03-19 19:22:46

+0

这真的很奇怪。也许你的devstorage进入了一个奇怪的状态?尝试删除表格,然后重新创建它并查看它的行为是否相同。 – 2012-03-19 20:09:50

回答

0

我想我发现问题,在RowKey这个词的末尾有一个空格字符(0x20,'')。所以这就是'RowKey1'。我删除了空间,现在在devstorage中一切都很好(在真实环境中这不是问题)。然而,在键内正确对待空格(比如'Row Key 1'可以毫无误差地使用'')会引起混淆,但是如果拖尾字符(或者也可能是前导)会导致这种行为。我读过'关键字段不允许使用的字符',但空间在那里没有提及。我想我应该使用Trim()作为我的字符串,然后再将它们用作键。