- Я написал код для изменения названия категории, но этот код очень длинный. Могу ли я как-нибудь сократить этот код?
- Должен ли я использовать транзакцию в этом случае?
{
"id": "1",
"name": "Devices",
}
Контейнер товаров – пример данных:
{
"id": "1",
"name": "Tv",
"price": 10,
"categoryId": "1",
"categoryName": "Devices"
}
Код:
CosmosClient _client = new CosmosClient(...);
Container Categories = _client.GetDatabase("testdb").GetContainer("categories");
Container Products = _client.GetDatabase("testdb").GetContainer("products");
var categoryIdTochange = "1";
var newCategoryName = "Electronics";
// Change category name in Categories:
var categoryToChangeResponse = await Categories.ReadItemAsync(categoryIdTochange, new PartitionKey(categoryIdTochange));
var categoryToChange = categoryToChangeResponse.Resource;
categoryToChange.Name = newCategoryName;
await Categories.UpsertItemAsync(categoryToChange, new PartitionKey(categoryToChange.Id));
// Get products with category id = 1 ('Devices'):
List productsToChange = new List();
var queryProductsToChange = new QueryDefinition(
"SELECT * FROM c WHERE c.categoryId = @itemId"
).WithParameter("@itemId", categoryIdTochange);
using (var feedIterator = Products.GetItemQueryIterator(queryProductsToChange))
{
while (feedIterator.HasMoreResults)
{
foreach (var item in await feedIterator.ReadNextAsync())
{
productsToChange.Add(item);
}
}
}
// Change category name in products with category 'Devices':
foreach (var productToChange in productsToChange)
{
productToChange.CategoryName = newCategoryName;
await Products.UpsertItemAsync(productToChange, new PartitionKey(productToChange.CategoryId));
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ntainer-in