Запоминание таблиц на лазури - Простейший возможный пример

Когда я изучаю новые технологии, мне нравится писать простейший возможный пример. Обычно это означает консольное приложение с наименьшим количеством ссылок. Я пытался с успехом написать приложение, которое читает и записывает в хранилище таблиц Azure. Я использовал этот, как руководство, как основу, но стараюсь делать все в основном методе. Подобный подход хорошо работал с хранилищем 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 Storage Explorer не отображает записи в моей таблице.

CustomerEntity customer1 = new CustomerEntity("Harp", "Walter");
customer1.Email = "[email protected]";
customer1.PhoneNumber = "425-555-0101";

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

Кроме того, я озадачен двумя перекрывающимися пространствами имен. И Microsoft.WindowsAzure.Storage.Table, и Microsoft.WindowsAzure.StorageClient содержат, например, класс CloudTableClient. Почему существуют два клиентских пространства имен и какой из них я должен использовать?

EDIT. Оказывается, запись существует. Просто дважды щелкнув по таблице в Azure Table Explorer, вы не увидите содержимое таблицы. Вы должны нажать "Запрос". Последний вопрос все еще стоит. Почему два пространства имен?

Ответ 1

Простейший образец, о котором я мог думать, это. Вам нужно 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 = "[email protected]";
     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 Storage Client Library 2.0 содержит новый упрощенный API. См. Ссылку ниже.

Что нового в клиентской библиотеке хранилищ для .NET(версия 2.0)

Ответ 2

Большое спасибо за это! Был поиск возраста для простого примера подключения к Azure Table Storage в вашей среде разработки. Из приведенных выше примеров я сформулировал следующий код:

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();

    }

  }
}