20

每当学习新技术时,我都喜欢写最简单的例子。通常这意味着引用数量最少的控制台应用程序。我一直在尝试编写一个读取和写入 Azure 表存储的应用程序,但收效甚微。我已使用操作指南作为基础,但尝试在 Main 方法中执行所有操作。类似的方法适用于 blob 存储,但表存储会带来麻烦。

我能够使用此代码创建一个表。

static void Main(string[] args)
{
    Microsoft.WindowsAzure.Storage.Table.CloudTableClient tableClient =
    new Microsoft.WindowsAzure.Storage.Table.CloudTableClient(
        new Uri("http://mystorage.table.core.windows.net/"),
    new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("[somename]", "[somekey]"));

    CloudTable table = tableClient.GetTableReference("people");
    table.CreateIfNotExists();
}

运行此代码后,我可以使用Azure Storage Explorer在我的存储中看到一个表。(仍然没有弄清楚如何在 manage.windowsazure.com 中查看表格。)

但是,如果我尝试插入记录(如前面提到的操作指南中所述),我会遇到冲突 409 EntityAlreadyExists。Azure 存储资源管理器未在我的表中显示任何记录。

CustomerEntity customer1 = new CustomerEntity("Harp", "Walter");
customer1.Email = "Walter@contoso.com";
customer1.PhoneNumber = "425-555-0101";

TableOperation insertOperation = TableOperation.Insert(customer1);
table.Execute(insertOperation);

另外,我对两个重叠的命名空间感到困惑。Microsoft.WindowsAzure.Storage.Table 和 Microsoft.WindowsAzure.StorageClient 都包含例如 CloudTableClient 类。为什么有两个客户端命名空间,我应该使用哪一个?

编辑原来记录确实存在。只需在 Azure 表资源管理器中双击表就不会显示表内容。您必须单击查询。最后一个问题仍然存在。为什么有两个命名空间?

4

2 回答 2

24

我能想到的最简单的示例就是这个。您需要 NuGet WindowsAzure.Storage 2.0。

static void Main(string[] args)
{
  try
  {
     CloudStorageAccount storageAccount =
        CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=<your_storage_name>;AccountKey=<your_account_key>");
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

     CloudTable table = tableClient.GetTableReference("people");
     table.CreateIfNotExists();

     CustomerEntity customer1 = new CustomerEntity("Harp", "Walter");
     customer1.Email = "Walter@contoso.com";
     customer1.PhoneNumber = "425-555-0101";

     // Create the TableOperation that inserts the customer entity.
     var insertOperation = TableOperation.Insert(customer1);

     // Execute the insert operation.
     table.Execute(insertOperation);

     // Read storage
     TableQuery<CustomerEntity> query =
        new TableQuery<CustomerEntity>()
           .Where(TableQuery.GenerateFilterCondition("PartitionKey",
               QueryComparisons.Equal, "Harp"));
     var list = table.ExecuteQuery(query).ToList();
   }
   catch (StorageException ex)
   {
       // Exception handling here.
   }
}

public class CustomerEntity : TableEntity
{
    public string Email { get; set; }
    public string PhoneNumber { get; set; }

    public CustomerEntity(string lastName, string firstName)
    {
        PartitionKey = lastName;
        RowKey = firstName;
    }

    public CustomerEntity() { }
}

第二个问题的答案,为什么有两个命名空间提供或多或少相同的 API,Azure 存储客户端库 2.0 包含一个新的简化 API。请参阅下面的链接。

.NET 存储客户端库的新增功能(2.0 版)

于 2013-06-13T13:18:32.243 回答
1

非常感谢!多年来一直在寻找在您的开发环境中连接到 Azure 表存储的简单示例。从您上面的示例中,我制定了以下代码:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Table;

namespace Bootstrapping
{
  public class Builder
  {

    public void Run()
    {
      CloudStorageAccount storageAccount =
        CloudStorageAccount.Parse("UseDevelopmentStorage=true");
      CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

      CloudTable table = tableClient.GetTableReference("people");
      table.CreateIfNotExists();

    }

  }
}
于 2015-11-05T06:16:12.013 回答