2013-01-18 53 views
1

Azure表存儲.NET客戶端通過SDK 1.8進行了完整的重新設計。有了新的SDK,我該如何檢查一行是否存在?檢查Azure表存儲是否存在行1.8

下面是從如何檢索單個項目SDK's documentation一個例子:

TableResult retrievedResult = table.Execute(retrieveOperation); 

// Print the phone number of the result. 
if (retrievedResult.Result != null) 
    Console.WriteLine(((CustomerEntity)retrievedResult.Result).PhoneNumber); 
else 
    Console.WriteLine("The phone number could not be retrieved."); 

基礎上的例子中,retrievedResult.Result爲空,如果沒有行被發現。但實際上事實並非如此,因爲如果沒有找到行,table.Execute會引發異常。

對於舊的SDK也是如此:如果未找到任何行,則會引發異常。但有一個屬性,把它關掉:

TableServiceContext.IgnoreResourceNotFoundException = true 

但是,這個選項隱藏在新的SDK中的位置?

回答

2

它似乎與我一直在SDK 1.8中的相同位置,但它已移到2.0版本的存儲API中。那是你正在使用的?

Microsoft.WindowsAzure.StorageClient.TableServiceContext已移至Microsoft.WindowsAzure.Storage.Table.DataServices.TableServiceContext

property you're looking for似乎仍然可以有:)

+1

我想我對版本號有點困惑:)我使用Azure存儲SDK 2.0,我認爲它是Azure SDK 1.8的一部分。不過,謝謝你的幫助。我能夠通過「tableClient.GetTableServiceContext()」找到屬性。IgnoreResourceNotFoundException「 –

+0

還有一點意見:隨SDK一起發佈的存儲客戶端庫是2.0.0.0版,它存在一些錯誤。我會建議從Nuget採取最新版本。截至今天,Nuget上的最新版本是2.0.3.0。 –

3

如果您使用TableEntity概念,你可以試試下面的代碼:

 CloudTable table = cloudTableClient.GetTableReference(tableName); 
     TableOperation retrieveOperation = TableOperation.Retrieve<YourEntity>(partitionKey, rowKey); 
     TableResult retrievedResult = table.Execute(retrieveOperation); 
     YourEntity fetchedEntity = retrievedResult.Result as YourEntity; 

如果實體不存在,你會得到fetchedEntity爲null。

+1

我認爲這是與文檔中顯示的相同的代碼。如果未找到該行,Execute-method將引發異常。但似乎你可以設置「tableClient.GetTableServiceContext()。IgnoreResourceNotFoundException = true」來獲得空結果而不是異常。 –