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