Руководство по Создание консольного приложения .NET для управления данными в учетной записи API SQL для Azure Cosmos DB
ОБЛАСТЬ ПРИМЕНЕНИЯ:
API SQL
Добро пожаловать в руководство по началу работы с API SQL для Azure Cosmos DB. После изучения этого руководства у вас будет консольное приложение, которое создает ресурсы Azure Cosmos DB и отправляет запросы к ним.
В этом руководстве используется версия 3.0 или более поздняя версия для Azure Cosmos DB .NET SDK и .NET 6.
Темы, рассматриваемые в этом руководстве:
- создание учетной записи Azure Cosmos и подключение к ней;
- настройка проекта в Visual Studio;
- создание базы данных и контейнера;
- добавление элементов в контейнер;
- выполнение запросов контейнера;
- создание, чтение, обновление и удаление (CRUD) для элемента;
- удаление базы данных.
У вас нет времени? Не беспокойтесь! Полное решение доступно на GitHub. Краткие инструкции см. в разделе Получение полного решения для этого руководства.
А теперь приступим к работе!
Предварительные требования
Активная учетная запись Azure. Если у вас ее нет, зарегистрируйте бесплатную учетную запись.
Пробную версию Azure Cosmos DB можно использовать бесплатно, без подписки Azure и без и каких-либо обязательств. Кроме того, вы можете создать учетную запись Azure Cosmos DB категории "Бесплатный". Для этой учетной записи бесплатно предоставляются первые 1000 ЕЗ/с и 25 ГБ пространства в хранилище. Также можно использовать эмулятор Azure Cosmos DB с URI https://localhost:8081. Сведения о ключе для использования с эмулятором см. в этом разделе.
Visual Studio последней версии с рабочей нагрузкой разработки для Azure. Вы можете начать с бесплатного выпускаинтегрированной среды разработки Visual Studio Community. При установке Visual Studio включите рабочую нагрузку разработки для Azure.
Шаг 1. создание учетной записи Azure Cosmos DB;
Давайте создадим учетную запись Azure Cosmos DB. Если у вас уже есть учетная запись, которую вы планируете использовать, пропустите этот раздел. Чтобы применить эмулятор Azure Cosmos DB, его нужно настроить в соответствии с указаниями в статье Использование эмулятора Azure Cosmos для разработки и тестирования в локальной среде. После этого переходите к разделу Шаг 2. Настройка проекта Visual Studio.
На домашней странице или в меню портала Azure выберите Создать ресурс.
На странице Создание найдите и выберите Azure Cosmos DB.
На странице Выберите вариант API в разделе Core (SQL) — рекомендовать нажмите Создать. Azure Cosmos DB предоставляет пять API: Core (SQL) и MongoDB для данных документа, Gremlin для данных графа, таблица Azure и Cassandra. Сейчас для каждого API требуется создавать отдельную учетную запись. Дополнительные сведения об API SQL
На странице создания учетной записи Azure Cosmos DB введите основные параметры для новой учетной записи Azure Cosmos.
Параметр Значение Описание Подписка имя подписки; Выберите подписку Azure, которую нужно использовать для этой учетной записи Azure Cosmos. Группа ресурсов Имя группы ресурсов Выберите группу ресурсов или Создать, затем введите уникальное имя для новой группы ресурсов. Имя учетной записи Уникальное имя Введите имя для идентификации учетной записи Azure Cosmos. Так как элемент documents.azure.com добавляется к указанному вами имени для создания URI, используйте уникальное имя.
Имя может содержать только строчные буквы, цифры и знак дефиса (-). Длина — от 3 до 44 знаков.Расположение Ближайший к пользователям регион Выберите географическое расположение для размещения учетной записи Azure Cosmos DB. Используйте ближайшее к пользователям расположение, чтобы предоставить им максимально быстрый доступ к данным. Режим емкости "Подготовленная пропускная способность" или "Бессерверный" Выберите Подготовленная пропускная способность, чтобы создать учетную запись в режиме подготовленной пропускной способности. Выберите Бессерверный, чтобы создать учетную запись в режиме Бессерверный. Применение скидки на основе категории "Бесплатный" для Azure Cosmos DB Применить или не применять В категории "Бесплатный" Azure Cosmos DB для учетной записи бесплатно предоставляются первые 1000 единиц запросов в секунду и 25 ГБ свободного места. Ознакомьтесь с дополнительными сведениями о категории "Бесплатный". Примечание
Вы можете использовать не более одной учетной записи Azure Cosmos DB категории "Бесплатный" на подписку Azure. При создании учетной записи нужно зарегистрироваться. Если параметр подачи заявки на скидку на основе категории "Бесплатный" не отображается, это означает, что в подписке уже включена другая учетная запись категории "Бесплатный".
На вкладке Глобальное распределение настройте следующие сведения. При работе с этим кратким руководством можно оставить значения по умолчанию.
Параметр Значение Описание Геоизбыточность Отключить Включает или отключает глобальное распределение в вашей учетной записи, связывая ваш регион с парным регионом. В дальнейшем в учетную запись можно добавить дополнительные регионы. Операции записи с поддержкой нескольких регионов Отключить Поддержка записи в несколько регионов позволяет использовать подготовленную пропускную способность для баз данных и контейнеров по всему миру. Примечание
Следующие параметры недоступны, если вы выбрали значение Бессерверный для параметра Режим емкости:
- Применение скидки на основе категории "Бесплатный"
- Геоизбыточность
- Выполнение операций записи в нескольких регионах
При необходимости можно настроить больше сведений на описанных ниже вкладках:
- Сеть: настройка доступа из виртуальной сети.
- Политика резервного копирования: настройте политику периодического или непрерывного резервного копирования.
- Шифрование: используйте либо ключ, управляемый службой, либо ключ, управляемый клиентом.
- Теги: теги — это пары имя — значение, которые можно назначать различным ресурсам и группам ресурсов для их категоризации и консолидированного отображения счетов.
Выберите Review + create (Просмотреть и создать).
Проверьте параметры учетной записи, а затем нажмите кнопку Создать. Создание учетной записи занимает несколько минут. Дождитесь, пока на странице портала появится сообщение Развертывание выполнено.
Выберите Перейти к ресурсу, чтобы перейти на страницу учетной записи Azure Cosmos DB.
Шаг 2. Настройка проекта Visual Studio
Откройте Visual Studio и выберите Создать проект.
В окне Создание проекта выберите Консольное приложение для C# и нажмите кнопку Далее.
Присвойте проекту имя CosmosGettingStartedTutorial и выберите Создать.
В обозревателе решений щелкните правой кнопкой мыши новое консольное приложение (оно находится в решении Visual Studio). Затем щелкните Управление пакетами NuGet.
В окне Диспетчер пакетов NuGet выберите Обзор и найдите Microsoft.Azure.Cosmos. Выберите Microsoft.Azure.Cosmos и щелкните Установить.
Идентификатором пакета для клиентской библиотеки API SQL Azure Cosmos DB является Microsoft Azure Cosmos DB Client Library.
Отлично! Теперь, когда мы завершили настройку, начнем писать код. Готовый проект, создаваемый в рамках этого руководства, вы найдете на странице Developing a .NET console app using Azure Cosmos DB (Разработка консольного приложения .NET с помощью Azure Cosmos DB).
Шаг 3. Подключение к учетной записи Azure Cosmos DB
Замените ссылки в начале приложения C# в файле Program.cs на указанные ниже:
using System; using System.Threading.Tasks; using System.Configuration; using System.Collections.Generic; using System.Net; using Microsoft.Azure.Cosmos;Добавьте перечисленные ниже константы и переменные в класс
Program.public class Program { // ADD THIS PART TO YOUR CODE // The Azure Cosmos DB endpoint for running this sample. private static readonly string EndpointUri = "<your endpoint here>"; // The primary key for the Azure Cosmos account. private static readonly string PrimaryKey = "<your primary key>"; // The Cosmos client instance private CosmosClient cosmosClient; // The database we will create private Database database; // The container we will create. private Container container; // The name of the database and container we will create private string databaseId = "FamilyDatabase"; private string containerId = "FamilyContainer"; }Примечание
Если вы уже знакомы с предыдущей версией пакета SDK для .NET, термины коллекция и документ не будут для вас новыми. Так как Azure Cosmos DB поддерживает несколько моделей API, в версии 3.0+ пакета SDK для .NET используются стандартные термины контейнер и элемент. Контейнер может представлять собой коллекцию, граф или таблицу. Элемент может представлять собой документ, ребро, вершину или запись с некоторым содержимым и размещается внутри контейнера. Дополнительные сведения см. в статье о работе с базами данных, контейнерами и элементами в Azure Cosmos DB.
Откройте портал Azure. Найдите учетную записи Azure Cosmos DB и выберите элемент Ключи.
В файле Program.cs замените значением URI. Замените
<your primary key>фактическим значением<your primary key>.Ниже метода Main добавьте новую асинхронную задачу с именем GetStartedDemoAsync, с помощью которой создается экземпляр .
public static async Task Main(string[] args) { } // ADD THIS PART TO YOUR CODE /* Entry point to call methods that operate on Azure Cosmos DB resources in this sample */ public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); }Мы используем GetStartedDemoAsync в качестве точки входа, которая вызывает методы для работы с ресурсами Azure Cosmos DB.
Добавьте указанный далее код, чтобы запустить асинхронную задачу GetStartedDemoAsync из метода Main. Метод Main будет перехватывать исключения и записывать их в консоль.
public static async Task Main(string[] args) { try { Console.WriteLine("Beginning operations...\n"); Program p = new Program(); await p.GetStartedDemoAsync(); } catch (CosmosException cosmosException) { Console.WriteLine("Cosmos Exception with Status {0} : {1}\n", cosmosException.StatusCode, cosmosException); } catch (Exception e) { Console.WriteLine("Error: {0}", e); } finally { Console.WriteLine("End of demo, press any key to exit."); Console.ReadKey(); } }Нажмите клавишу F5, чтобы запустить приложение.
На консоли отобразится сообщение: Конец демонстрации, нажмите любую клавишу, чтобы выйти. Это сообщение подтверждает подключение приложения к Azure Cosmos DB. Теперь можно закрыть окно консоли.
Поздравляем! Вы успешно подключились к учетной записи Azure Cosmos DB.
Шаг 4. Создание базы данных
База данных представляет собой логический контейнер элементов, разделенных между контейнерами. Базу данных можно создать с помощью метода CreateDatabaseIfNotExistsAsync или CreateDatabaseAsync из класса CreateDatabaseIfNotExistsAsync.
Скопируйте и вставьте метод
CreateDatabaseAsyncниже методаGetStartedDemoAsync./// <summary> /// Create the database if it does not exist /// </summary> private async Task CreateDatabaseAsync() { // Create a new database this.database = await this.cosmosClient.CreateDatabaseIfNotExistsAsync(databaseId); Console.WriteLine("Created Database: {0}\n", this.database.Id); }Функция
CreateDatabaseAsyncпозволяет создать базу данных с идентификаторомFamilyDatabase(если она не была создана ранее), где идентификатор извлекается из поляdatabaseId. Для этой демонстрации мы создаем базу данных как часть упражнения, но в приложениях в рабочей среде не рекомендуется делать это в рамках обычного процесса.Скопируйте и вставьте приведенный ниже код для вызова нового метода CreateDatabaseAsync ниже строки, в которой создается экземпляр CosmosClient.
public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); //ADD THIS PART TO YOUR CODE await this.CreateDatabaseAsync(); }На этом этапе файл Program.cs должен выглядеть, как показано ниже, но с реальными значениями конечной точки и первичного ключа.
using System; using System.Threading.Tasks; using System.Configuration; using System.Collections.Generic; using System.Net; using Microsoft.Azure.Cosmos; namespace CosmosGettingStartedTutorial { class Program { // The Azure Cosmos DB endpoint for running this sample. private static readonly string EndpointUri = "<your endpoint here>"; // The primary key for the Azure Cosmos account. private static readonly string PrimaryKey = "<your primary key>"; // The Cosmos client instance private CosmosClient cosmosClient; // The database we will create private Database database; // The container we will create. private Container container; // The name of the database and container we will create private string databaseId = "FamilyDatabase"; private string containerId = "FamilyContainer"; public static async Task Main(string[] args) { try { Console.WriteLine("Beginning operations..."); Program p = new Program(); await p.GetStartedDemoAsync(); } catch (CosmosException cosmosException) { Console.WriteLine("Cosmos Exception with Status {0} : {1}\n", cosmosException.StatusCode, cosmosException); } catch (Exception e) { Console.WriteLine("Error: {0}\n", e); } finally { Console.WriteLine("End of demo, press any key to exit."); Console.ReadKey(); } } /// <summary> /// Entry point to call methods that operate on Azure Cosmos DB resources in this sample /// </summary> public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); await this.CreateDatabaseAsync(); } /// <summary> /// Create the database if it does not exist /// </summary> private async Task CreateDatabaseAsync() { // Create a new database this.database = await this.cosmosClient.CreateDatabaseIfNotExistsAsync(databaseId); Console.WriteLine("Created Database: {0}\n", this.database.Id); } } }Нажмите клавишу F5, чтобы запустить приложение.
Примечание
Если вы получаете ошибку исключения "503 — служба недоступна", то возможно, что требуемые порты для прямого подключения блокируются брандмауэром. Чтобы устранить эту проблему, откройте необходимые порты или используйте подключение в режиме шлюза, как показано в следующем коде:
// Create a new instance of the Cosmos Client in Gateway mode this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey, new CosmosClientOptions() { ConnectionMode = ConnectionMode.Gateway });
Поздравляем! Вы успешно создали базу данных Azure Cosmos.
Шаг 5. Создание контейнера
Предупреждение
С помощью метода CreateContainerIfNotExistsAsync создается контейнер. Это влечет за собой необходимость оплаты. Дополнительные сведения см. на нашей странице цен.
Контейнер можно создать с помощью метода CreateContainerIfNotExistsAsync или CreateContainerAsync из класса . Контейнер состоит из элементов (которые в случае API SQL являются документами JSON) и связанной логики приложения JavaScript на стороне сервера, например хранимых процедур, определяемых пользователем функций и триггеров.
Скопируйте и вставьте метод
CreateContainerAsyncниже методаCreateDatabaseAsync. ФункцияCreateContainerAsyncпозволяет создать контейнер (если он не был создан ранее) с идентификаторомFamilyContainer. Для идентификатора используется значение из поляcontainerIdс разделением по свойствуLastName. Для этой демонстрации мы создаем контейнер как часть упражнения, но в приложениях в рабочей среде не рекомендуется делать это в рамках обычного процесса./// <summary> /// Create the container if it does not exist. /// Specifiy "/LastName" as the partition key since we're storing family information, to ensure good distribution of requests and storage. /// </summary> /// <returns></returns> private async Task CreateContainerAsync() { // Create a new container this.container = await this.database.CreateContainerIfNotExistsAsync(containerId, "/LastName"); Console.WriteLine("Created Container: {0}\n", this.container.Id); }Скопируйте и вставьте приведенный ниже код, где вы создали экземпляр CosmosClient, для вызова добавленного метода CreateContainer.
public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); await this.CreateDatabaseAsync(); //ADD THIS PART TO YOUR CODE await this.CreateContainerAsync(); }Нажмите клавишу F5, чтобы запустить приложение.
Поздравляем! Вы успешно создали контейнер Azure Cosmos.
Шаг 6. Добавление элементов в контейнер
Элемент можно создать с помощью метода CreateItemAsync из класса . При использовании API SQL все элементы проецируются как документы с произвольным содержимым JSON, которое определяет пользователь. Теперь можно вставить элемент в ваш контейнер Azure Cosmos.
Сначала создайте класс Family, который представляет объекты, хранящиеся в Azure Cosmos DB для нашего примера. Также создайте подклассы Parent, Child, Pet и Address, которые вызываются из Family. Элемент должен иметь свойство Id, сериализованное как id в файле JSON.
Нажмите сочетание клавиш Ctrl+Shift+A, чтобы открыть окно Добавить новый элемент. Добавьте в ваш проект новый класс
Family.cs.
Скопируйте и вставьте в
Family.csэлементыFamily,Parent,Child,Petи классAddress.using Newtonsoft.Json; namespace CosmosGettingStartedTutorial { public class Family { [JsonProperty(PropertyName = "id")] public string Id { get; set; } public string LastName { get; set; } public Parent[] Parents { get; set; } public Child[] Children { get; set; } public Address Address { get; set; } public bool IsRegistered { get; set; } public override string ToString() { return JsonConvert.SerializeObject(this); } } public class Parent { public string FamilyName { get; set; } public string FirstName { get; set; } } public class Child { public string FamilyName { get; set; } public string FirstName { get; set; } public string Gender { get; set; } public int Grade { get; set; } public Pet[] Pets { get; set; } } public class Pet { public string GivenName { get; set; } } public class Address { public string State { get; set; } public string County { get; set; } public string City { get; set; } } }Вернитесь к файлу Program.cs и добавьте метод после метода
CreateContainerAsync./// <summary> /// Add Family items to the container /// </summary> private async Task AddItemsToContainerAsync() { // Create a family object for the Andersen family Family andersenFamily = new Family { Id = "Andersen.1", LastName = "Andersen", Parents = new Parent[] { new Parent { FirstName = "Thomas" }, new Parent { FirstName = "Mary Kay" } }, Children = new Child[] { new Child { FirstName = "Henriette Thaulow", Gender = "female", Grade = 5, Pets = new Pet[] { new Pet { GivenName = "Fluffy" } } } }, Address = new Address { State = "WA", County = "King", City = "Seattle" }, IsRegistered = false }; try { // Read the item to see if it exists. ItemResponse<Family> andersenFamilyResponse = await this.container.ReadItemAsync<Family>(andersenFamily.Id, new PartitionKey(andersenFamily.LastName)); Console.WriteLine("Item in database with id: {0} already exists\n", andersenFamilyResponse.Resource.Id); } catch(CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { // Create an item in the container representing the Andersen family. Note we provide the value of the partition key for this item, which is "Andersen" ItemResponse<Family> andersenFamilyResponse = await this.container.CreateItemAsync<Family>(andersenFamily, new PartitionKey(andersenFamily.LastName)); // Note that after creating the item, we can access the body of the item with the Resource property off the ItemResponse. We can also access the RequestCharge property to see the amount of RUs consumed on this request. Console.WriteLine("Created item in database with id: {0} Operation consumed {1} RUs.\n", andersenFamilyResponse.Resource.Id, andersenFamilyResponse.RequestCharge); } // Create a family object for the Wakefield family Family wakefieldFamily = new Family { Id = "Wakefield.7", LastName = "Wakefield", Parents = new Parent[] { new Parent { FamilyName = "Wakefield", FirstName = "Robin" }, new Parent { FamilyName = "Miller", FirstName = "Ben" } }, Children = new Child[] { new Child { FamilyName = "Merriam", FirstName = "Jesse", Gender = "female", Grade = 8, Pets = new Pet[] { new Pet { GivenName = "Goofy" }, new Pet { GivenName = "Shadow" } } }, new Child { FamilyName = "Miller", FirstName = "Lisa", Gender = "female", Grade = 1 } }, Address = new Address { State = "NY", County = "Manhattan", City = "NY" }, IsRegistered = true }; try { // Read the item to see if it exists ItemResponse<Family> wakefieldFamilyResponse = await this.container.ReadItemAsync<Family>(wakefieldFamily.Id, new PartitionKey(wakefieldFamily.LastName)); Console.WriteLine("Item in database with id: {0} already exists\n", wakefieldFamilyResponse.Resource.Id); } catch(CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { // Create an item in the container representing the Wakefield family. Note we provide the value of the partition key for this item, which is "Wakefield" ItemResponse<Family> wakefieldFamilyResponse = await this.container.CreateItemAsync<Family>(wakefieldFamily, new PartitionKey(wakefieldFamily.LastName)); // Note that after creating the item, we can access the body of the item with the Resource property off the ItemResponse. We can also access the RequestCharge property to see the amount of RUs consumed on this request. Console.WriteLine("Created item in database with id: {0} Operation consumed {1} RUs.\n", wakefieldFamilyResponse.Resource.Id, wakefieldFamilyResponse.RequestCharge); } }Этот код позволяет проверить, есть ли элемент с таким же идентификатором. Мы вставим два элемента: по одному для семей Андерсен и Вейкфилд.
Добавьте вызов в
AddItemsToContainerAsyncв методGetStartedDemoAsync.public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); await this.CreateDatabaseAsync(); await this.CreateContainerAsync(); //ADD THIS PART TO YOUR CODE await this.AddItemsToContainerAsync(); }Нажмите клавишу F5, чтобы запустить приложение.
Поздравляем! Вы успешно создали два элемента Azure Cosmos.
Шаг 7. Запрашивание ресурсов Azure Cosmos DB
Azure Cosmos DB поддерживает полнофункциональные запросы к документам JSON, хранящимся в каждом контейнере. Дополнительные сведения см. в статье о начале работы с запросами SQL. В следующем примере кода показано, как выполнить запрос к элементам, вставленным на предыдущем шаге.
Скопируйте метод
QueryItemsAsyncи вставьте его после методаAddItemsToContainerAsync./// <summary> /// Run a query (using Azure Cosmos DB SQL syntax) against the container /// </summary> private async Task QueryItemsAsync() { var sqlQueryText = "SELECT * FROM c WHERE c.LastName = 'Andersen'"; Console.WriteLine("Running query: {0}\n", sqlQueryText); QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText); using FeedIterator<Family> queryResultSetIterator = this.container.GetItemQueryIterator<Family>(queryDefinition); List<Family> families = new List<Family>(); while (queryResultSetIterator.HasMoreResults) { FeedResponse<Family> currentResultSet = await queryResultSetIterator.ReadNextAsync(); foreach (Family family in currentResultSet) { families.Add(family); Console.WriteLine("\tRead {0}\n", family); } } }Добавьте вызов в
QueryItemsAsyncв методGetStartedDemoAsync.public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); await this.CreateDatabaseAsync(); await this.CreateContainerAsync(); await this.AddItemsToContainerAsync(); //ADD THIS PART TO YOUR CODE await this.QueryItemsAsync(); }Нажмите клавишу F5, чтобы запустить приложение.
Поздравляем! Вы успешно отправили запрос в контейнер Azure Cosmos.
Шаг 8. Замена элемента JSON
Теперь мы будем обновлять элемент в Azure Cosmos DB. Мы изменим свойство IsRegistered элемента Family и параметр Grade одного из его дочерних элементов.
Скопируйте метод
ReplaceFamilyItemAsyncи вставьте его после методаQueryItemsAsync./// <summary> /// Replace an item in the container /// </summary> private async Task ReplaceFamilyItemAsync() { ItemResponse<Family> wakefieldFamilyResponse = await this.container.ReadItemAsync<Family>("Wakefield.7", new PartitionKey("Wakefield")); var itemBody = wakefieldFamilyResponse.Resource; // update registration status from false to true itemBody.IsRegistered = true; // update grade of child itemBody.Children[0].Grade = 6; // replace the item with the updated content wakefieldFamilyResponse = await this.container.ReplaceItemAsync<Family>(itemBody, itemBody.Id, new PartitionKey(itemBody.LastName)); Console.WriteLine("Updated Family [{0},{1}].\n \tBody is now: {2}\n", itemBody.LastName, itemBody.Id, wakefieldFamilyResponse.Resource); }Добавьте вызов в
ReplaceFamilyItemAsyncв методGetStartedDemoAsync.public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); await this.CreateDatabaseAsync(); await this.CreateContainerAsync(); await this.AddItemsToContainerAsync(); await this.QueryItemsAsync(); //ADD THIS PART TO YOUR CODE await this.ReplaceFamilyItemAsync(); }Нажмите клавишу F5, чтобы запустить приложение.
Поздравляем! Вы успешно заменили элемент Azure Cosmos.
Шаг 9. Удаление элемента
Теперь мы будем удалять элемент из Azure Cosmos DB.
Скопируйте метод
DeleteFamilyItemAsyncи вставьте его после методаReplaceFamilyItemAsync./// <summary> /// Delete an item in the container /// </summary> private async Task DeleteFamilyItemAsync() { var partitionKeyValue = "Wakefield"; var familyId = "Wakefield.7"; // Delete an item. Note we must provide the partition key value and id of the item to delete ItemResponse<Family> wakefieldFamilyResponse = await this.container.DeleteItemAsync<Family>(familyId,new PartitionKey(partitionKeyValue)); Console.WriteLine("Deleted Family [{0},{1}]\n", partitionKeyValue, familyId); }Добавьте вызов в
DeleteFamilyItemAsyncв методGetStartedDemoAsync.public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); await this.CreateDatabaseAsync(); await this.CreateContainerAsync(); await this.AddItemsToContainerAsync(); await this.QueryItemsAsync(); await this.ReplaceFamilyItemAsync(); //ADD THIS PART TO YOUR CODE await this.DeleteFamilyItemAsync(); }Нажмите клавишу F5, чтобы запустить приложение.
Поздравляем! Вы успешно удалили элемент Azure Cosmos.
Шаг 10. Удаление базы данных
Теперь мы удалим базу данных. При удалении созданной базы данных удаляются и все ее дочерние ресурсы. К таким ресурсам относятся контейнеры, элементы, а также хранимые процедуры, определяемые пользователем функции и триггеры. Мы также избавимся от экземпляра CosmosClient.
Скопируйте метод
DeleteDatabaseAndCleanupAsyncи вставьте его после методаDeleteFamilyItemAsync./// <summary> /// Delete the database and dispose of the Cosmos Client instance /// </summary> private async Task DeleteDatabaseAndCleanupAsync() { DatabaseResponse databaseResourceResponse = await this.database.DeleteAsync(); // Also valid: await this.cosmosClient.Databases["FamilyDatabase"].DeleteAsync(); Console.WriteLine("Deleted Database: {0}\n", this.databaseId); //Dispose of CosmosClient this.cosmosClient.Dispose(); }Добавьте вызов в
DeleteDatabaseAndCleanupAsyncв методGetStartedDemoAsync./// <summary> /// Entry point to call methods that operate on Azure Cosmos DB resources in this sample /// </summary> public async Task GetStartedDemoAsync() { // Create a new instance of the Cosmos Client this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey); await this.CreateDatabaseAsync(); await this.CreateContainerAsync(); await this.AddItemsToContainerAsync(); await this.QueryItemsAsync(); await this.ReplaceFamilyItemAsync(); await this.DeleteFamilyItemAsync(); await this.DeleteDatabaseAndCleanupAsync(); }Нажмите клавишу F5, чтобы запустить приложение.
Поздравляем! Вы успешно удалили базу данных Azure Cosmos.
Шаг 11. Запуск консольного приложения C#
Чтобы создать приложение в режиме отладки, откройте Visual Studio и нажмите клавишу F5.
В окне консоли должны отобразиться все выходные данные вашего приложения. Эти выходные данные содержат результаты добавленных запросов. Они должны выглядеть так же, как представленный ниже пример текста.
Beginning operations...
Created Database: FamilyDatabase
Created Container: FamilyContainer
Created item in database with id: Andersen.1 Operation consumed 11.43 RUs.
Created item in database with id: Wakefield.7 Operation consumed 14.29 RUs.
Running query: SELECT * FROM c WHERE c.LastName = 'Andersen'
Read {"id":"Andersen.1","LastName":"Andersen","Parents":[{"FamilyName":null,"FirstName":"Thomas"},{"FamilyName":null,"FirstName":"Mary Kay"}],"Children":[{"FamilyName":null,"FirstName":"Henriette Thaulow","Gender":"female","Grade":5,"Pets":[{"GivenName":"Fluffy"}]}],"Address":{"State":"WA","County":"King","City":"Seattle"},"IsRegistered":false}
Updated Family [Wakefield,Wakefield.7].
Body is now: {"id":"Wakefield.7","LastName":"Wakefield","Parents":[{"FamilyName":"Wakefield","FirstName":"Robin"},{"FamilyName":"Miller","FirstName":"Ben"}],"Children":[{"FamilyName":"Merriam","FirstName":"Jesse","Gender":"female","Grade":6,"Pets":[{"GivenName":"Goofy"},{"GivenName":"Shadow"}]},{"FamilyName":"Miller","FirstName":"Lisa","Gender":"female","Grade":1,"Pets":null}],"Address":{"State":"NY","County":"Manhattan","City":"NY"},"IsRegistered":true}
Deleted Family [Wakefield,Wakefield.7]
Deleted Database: FamilyDatabase
End of demo, press any key to exit.
Поздравляем! Вы завершили работу с этим руководством, и теперь у вас есть работающее консольное приложение C#.
Получение готового решения для этого руководства
Если у вас нет времени на выполнение шагов из этого руководства или вы хотите просто скачать примеры кода, вы можете это сделать.
Для создания решения GetStarted вам потребуются указанные ниже компоненты.
- Активная учетная запись Azure. Если у вас ее нет, зарегистрируйте бесплатную учетную запись.
- Учетная запись Azure Cosmos DB.
- решение GetStarted , доступное в GitHub.
Чтобы в Visual Studio восстановить ссылки на пакет SDK .NET для Azure Cosmos DB, в обозревателе решений щелкните правой кнопкой мыши решение, а затем щелкните Восстановить пакеты NuGet. Затем в файле App.config обновите значения и PrimaryKey согласно инструкциям в разделе PrimaryKey.
Теперь все готово. Выполните сборку и начинайте работу с решением.
Дальнейшие действия
- Требуется более подробное руководство по ASP.NET MVC? См. Учебник. по разработке веб-приложения ASP.NET Core MVC с использованием Azure Cosmos DB с помощью пакета SDK для .NET.
- Нужно протестировать масштабирование и производительность с помощью Azure Cosmos DB? См. инструкции по проверке производительности и масштабирования с использованием Azure Cosmos DB.
- Чтобы узнать, как отслеживать запросы, использование и хранение данных в Azure Cosmos DB, ознакомьтесь со статьей о мониторинге метрик производительности и хранения в Azure Cosmos DB.
- Дополнительные сведения об Azure Cosmos DB см. в статье Добро пожаловать в базу данных Azure Cosmos DB.
- Пытаетесь выполнить планирование ресурсов для миграции в Azure Cosmos DB? Можете использовать для этого сведения о существующем кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, прочитайте об оценке единиц запроса на основе этих данных.
- Если вам известна стандартная частота запросов для текущей рабочей нагрузки базы данных, ознакомьтесь со статьей о расчете единиц запросов с помощью планировщика ресурсов Azure Cosmos DB