Migrace aplikace pro použití sady .NET SDK služby Azure Cosmos DB v3
PLATÍ PRO: NoSQL
Důležité
Další informace o sadě .NET SDK služby Azure Cosmos DB v3 najdete v poznámkách k verzi, úložišti .NET GitHub, tipech k výkonu sady .NET SDK v3 a průvodci odstraňováním potíží.
Tento článek popisuje některé aspekty upgradu stávající aplikace .NET na novější sadu .NET SDK služby Azure Cosmos DB verze 3 pro rozhraní API for NoSQL. Sada .NET SDK služby Azure Cosmos DB v3 odpovídá oboru názvů Microsoft.Azure.Azure Cosmos DB. Informace uvedené v tomto dokumentu můžete použít, pokud migrujete aplikaci z některé z následujících sad .NET SDK služby Azure Cosmos DB:
- Sada .NET Framework SDK služby Azure Cosmos DB v2 pro rozhraní API pro NoSQL
- Sada .NET Core SDK služby Azure Cosmos DB v2 pro rozhraní API pro NoSQL
Pokyny v tomto článku vám také pomůžou migrovat následující externí knihovny, které jsou teď součástí sady .NET SDK služby Azure Cosmos DB verze 3 pro rozhraní API for NoSQL:
- Knihovna procesoru kanálu změn .NET 2.0
- Knihovna bulk Executor .NET 1.1 nebo novější
Novinky v sadě .NET SDK V3
Sada SDK v3 obsahuje řadu vylepšení použitelnosti a výkonu, mezi která patří:
- Intuitivní pojmenování programovacího modelu
- .NET Standard 2.0 **
- Zvýšení výkonu prostřednictvím podpory rozhraní API streamu
- Fluent hierarchie, která nahrazuje potřebu továrny identifikátoru URI
- Integrovaná podpora pro knihovnu procesoru kanálu změn
- Integrovaná podpora hromadného provozu
- Napodobené rozhraní API pro snadnější testování jednotek
- Podpora transakční dávky a Blazoru
- Připojitelné serializátory
- Škálování kontejnerů bez dělení a automatického škálování
** Sada SDK cílí na .NET Standard 2.0, která sjednocuje stávající sady .NET Framework a sady .NET Core SDK služby Azure Cosmos DB do jedné sady .NET SDK. Sadu .NET SDK můžete použít v libovolné platformě, která implementuje .NET Standard 2.0, včetně aplikací .NET Framework 4.6.1 nebo novějších a .NET Core 2.0+.
Většina sítí, logiky opakování a nižších úrovní sady SDK zůstává z velké části nezměněná.
Sada .NET SDK služby Azure Cosmos DB v3 je teď open source. Vítáme všechny žádosti o přijetí změn a budeme zaznamenávat problémy s protokolováním a sledovat zpětnou vazbu na GitHubu. Budeme pracovat na všech funkcích, které zlepší uživatelské prostředí.
Proč migrovat na sadu .NET v3 SDK
Kromě řady vylepšení použitelnosti a výkonu se nové investice do funkcí provedené v nejnovější sadě SDK nepřevedou zpět do starších verzí. Sada SDK v2 je aktuálně v režimu údržby. Pro co nejlepší prostředí pro vývoj doporučujeme vždy začít s nejnovější podporovanou verzí sady SDK.
Změny hlavního názvu ze sady SDK v2 na sadu SDK v3
V sadě .NET 3.0 SDK byly použity následující změny názvů, které odpovídají konvencím pojmenování rozhraní API pro rozhraní API pro NoSQL:
DocumentClient
přejmenová se naCosmosClient
Collection
přejmenová se naContainer
Document
přejmenová se naItem
Všechny objekty prostředků se přejmenují s dalšími vlastnostmi, které zahrnují název prostředku pro přehlednost.
Tady jsou některé změny názvu hlavní třídy:
.NET v2 SDK | Sada .NET v3 SDK |
---|---|
Microsoft.Azure.Documents.Client.DocumentClient |
Microsoft.Azure.Cosmos.CosmosClient |
Microsoft.Azure.Documents.Client.ConnectionPolicy |
Microsoft.Azure.Cosmos.CosmosClientOptions |
Microsoft.Azure.Documents.Client.DocumentClientException |
Microsoft.Azure.Cosmos.CosmosException |
Microsoft.Azure.Documents.Client.Database |
Microsoft.Azure.Cosmos.DatabaseProperties |
Microsoft.Azure.Documents.Client.DocumentCollection |
Microsoft.Azure.Cosmos.ContainerProperties |
Microsoft.Azure.Documents.Client.RequestOptions |
Microsoft.Azure.Cosmos.ItemRequestOptions |
Microsoft.Azure.Documents.Client.FeedOptions |
Microsoft.Azure.Cosmos.QueryRequestOptions |
Microsoft.Azure.Documents.Client.StoredProcedure |
Microsoft.Azure.Cosmos.StoredProcedureProperties |
Microsoft.Azure.Documents.Client.Trigger |
Microsoft.Azure.Cosmos.TriggerProperties |
Microsoft.Azure.Documents.SqlQuerySpec |
Microsoft.Azure.Cosmos.QueryDefinition |
Třídy nahrazené v sadě .NET v3 SDK
V sadě SDK verze 3.0 byly nahrazeny následující třídy:
Microsoft.Azure.Documents.UriFactory
Třída Microsoft.Azure.Documents.UriFactory byla nahrazena fluent designem.
Container container = client.GetContainer(databaseName,containerName);
ItemResponse<SalesOrder> response = await this._container.CreateItemAsync(
salesOrder,
new PartitionKey(salesOrder.AccountNumber));
Microsoft.Azure.Documents.Document
Vzhledem k tomu, že sada .NET v3 SDK umožňuje uživatelům konfigurovat vlastní serializační modul, neexistuje žádná přímá náhrada typu Document
. Při použití Newtonsoft.Json (výchozí modul serializace) JObject
lze použít k dosažení stejné funkce. Při použití jiného modulu serializace můžete použít základní typ dokumentu JSON (například JsonDocument
pro System.Text.Json). Doporučujeme použít typ jazyka C#, který odráží schéma položek, a nespoléhat se na obecné typy.
Microsoft.Azure.Documents.Resource
Neexistuje přímá náhrada , Resource
v případech, kdy byla použita pro dokumenty, postupujte podle pokynů pro Document
.
Microsoft.Azure.Documents.AccessCondition
IfNoneMatch
nebo IfMatch
jsou nyní k dispozici Microsoft.Azure.Cosmos.ItemRequestOptions
přímo.
Změny generování ID položky
ID položky se už automaticky nezaplní v sadě .NET SDK v3. ID položky proto musí obsahovat speciálně vygenerované ID. Podívejte se na následující příklad:
[JsonProperty(PropertyName = "id")]
public Guid Id { get; set; }
Změna výchozího chování režimu připojení
Sada SDK v3 teď ve výchozím nastavení v porovnání s předchozí sadou SDK v2 ve výchozím nastavení představuje režimy připojení Direct + TCP. Tato změna poskytuje vyšší výkon a škálovatelnost.
Změny v FeedOptions (QueryRequestOptions v 3.0 SDK)
Třída FeedOptions
v sadě SDK v2 se teď přejmenovala na v sadě SDK v3 a v rámci této třídy došlo k QueryRequestOptions
několika změnám názvu nebo výchozí hodnoty nebo byla zcela odebrána.
.NET v2 SDK | Sada .NET v3 SDK |
---|---|
FeedOptions.MaxDegreeOfParallelism |
QueryRequestOptions.MaxConcurrency – Výchozí hodnota a přidružené chování zůstávají stejné, operace spustí klientskou stranu během paralelního spouštění dotazů sériově bez paralelismu. |
FeedOptions.PartitionKey |
QueryRequestOptions.PartitionKey - Chování je zachováno. |
FeedOptions.EnableCrossPartitionQuery |
Odstraněný. Výchozí chování v sadě SDK 3.0 spočívá v tom, že se spustí dotazy napříč oddíly, aniž by bylo nutné povolit vlastnost konkrétně. |
FeedOptions.PopulateQueryMetrics |
Odstraněný. Je teď ve výchozím nastavení povolená a je součástí diagnostiky. |
FeedOptions.RequestContinuation |
Odstraněný. Nyní se propaguje na samotné metody dotazu. |
FeedOptions.JsonSerializerSettings |
Odstraněný. Další informace najdete v tématu přizpůsobení serializace . |
FeedOptions.PartitionKeyRangeId |
Odstraněný. Stejný výsledek lze získat pomocí FeedRange jako vstup do metody dotazu. |
FeedOptions.DisableRUPerMinuteUsage |
Odstraněný. |
Vytvoření klienta
Sada .NET SDK v3 poskytuje fluent CosmosClientBuilder
třídu, která nahrazuje potřebu továrny identifikátorů URI sady SDK v2.
Fluent design vytváří adresy URL interně a umožňuje předání jednoho Container
objektu místo DocumentClient
, DatabaseName
a DocumentCollection
.
Následující příklad vytvoří novou CosmosClientBuilder
se silnou úrovní konzistence a seznamem upřednostňovaných umístění:
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder(
accountEndpoint: "https://testcosmos.documents.azure.com:443/",
authKeyOrResourceToken: "SuperSecretKey")
.WithConsistencyLevel(ConsistencyLevel.Strong)
.WithApplicationRegion(Regions.EastUS);
CosmosClient client = cosmosClientBuilder.Build();
Výjimky
Kde sada SDK v2 používaná DocumentClientException
k signalizaci chyb během operací používá CosmosException
sadu SDK v3, která zveřejňuje informace související s odpověďmi StatusCode
Diagnostics
a další informace související s odpověďmi. Všechny úplné informace jsou serializovány při ToString()
použití:
catch (CosmosException ex)
{
HttpStatusCode statusCode = ex.StatusCode;
CosmosDiagnostics diagnostics = ex.Diagnostics;
// store diagnostics optionally with diagnostics.ToString();
// or log the entire error details with ex.ToString();
}
Diagnostika
Pokud sada SDK v2 měla k dispozici diagnostiku pouze s přímým přístupem prostřednictvím RequestDiagnosticsString
vlastnosti, používá Diagnostics
sada SDK v3 dostupné ve všech odpovědích a výjimkách, které jsou bohatší a nejsou omezeny na přímý režim. Zahrnují nejen čas strávený sadou SDK pro operaci, ale také oblasti, na které se operace kontaktovala:
try
{
ItemResponse<MyItem> response = await container.ReadItemAsync<MyItem>(
partitionKey: new PartitionKey("MyPartitionKey"),
id: "MyId");
TimeSpan elapsedTime = response.Diagnostics.GetElapsedTime();
if (elapsedTime > somePreDefinedThreshold)
{
// log response.Diagnostics.ToString();
IReadOnlyList<(string region, Uri uri)> regions = response.Diagnostics.GetContactedRegions();
}
}
catch (CosmosException cosmosException) {
string diagnostics = cosmosException.Diagnostics.ToString();
TimeSpan elapsedTime = cosmosException.Diagnostics.GetElapsedTime();
IReadOnlyList<(string region, Uri uri)> regions = cosmosException.Diagnostics.GetContactedRegions();
// log cosmosException.ToString()
}
ConnectionPolicy
Některá nastavení ConnectionPolicy
byla přejmenována nebo nahrazena CosmosClientOptions
:
.NET v2 SDK | Sada .NET v3 SDK |
---|---|
EnableEndpointDiscovery |
LimitToEndpoint - Hodnota je nyní invertována, pokud EnableEndpointDiscovery byla nastavena na true , LimitToEndpoint měla by být nastavena na false . Před použitím tohoto nastavení musíte porozumět tomu, jak ovlivňuje klienta. |
ConnectionProtocol |
Odstraněný. Protokol je svázaný s režimem, ať už se jedná o bránu (HTTPS) nebo direct (TCP). Přímý režim s protokolem HTTPS se už v sadě SDK V3 nepodporuje a doporučuje se použít protokol TCP. |
MediaRequestTimeout |
Odstraněný. Přílohy se už nepodporují. |
SetCurrentLocation |
CosmosClientOptions.ApplicationRegion lze použít k dosažení stejného efektu. |
PreferredLocations |
CosmosClientOptions.ApplicationPreferredRegions lze použít k dosažení stejného efektu. |
UserAgentSuffix |
CosmosClientBuilder.ApplicationName lze použít k dosažení stejného efektu. |
UseMultipleWriteLocations |
Odstraněný. Sada SDK automaticky zjistí, jestli účet podporuje více koncových bodů zápisu. |
Zásady indexování
V zásadách indexování není možné tyto vlastnosti konfigurovat. Pokud nezadáte, tyto vlastnosti budou mít vždy následující hodnoty:
Název vlastnosti | Nová hodnota (není konfigurovatelná) |
---|---|
Kind |
range |
dataType |
String a Number |
V této části najdete příklady zásad indexování pro zahrnutí a vyloučení cest. Vzhledem k vylepšením v dotazovacím stroji nemá konfigurace těchto vlastností žádný vliv na výkon, i když používáte starší verzi sady SDK.
Token relace
Pokud sada SDK v2 vystavila token relace odpovědi v ResourceResponse.SessionToken
případech, kdy bylo vyžadováno zachycení tokenu relace, protože token relace je hlavička, sada SDK v3 zveřejňuje tuto hodnotu ve Headers.Session
vlastnosti jakékoli odpovědi.
Časové razítko
Pokud sada SDK v2 odhalila časové razítko dokumentu prostřednictvím Timestamp
vlastnosti, protože Document
už není k dispozici, mohou uživatelé mapovat _ts
systémovou vlastnost na vlastnost v modelu.
OpenAsync
Pro případy použití, kdy OpenAsync()
se používalo k zahřátí klienta sady SDK v2, CreateAndInitializeAsync
je možné použít k vytvoření i zahřátí klienta sady SDK v3.
Použití rozhraní API procesoru kanálu změn přímo ze sady SDK v3
Sada SDK v3 má integrovanou podporu rozhraní API procesoru kanálu změn, která umožňuje používat stejnou sadu SDK pro sestavení aplikace a implementaci procesoru kanálu změn. Dříve jste museli použít samostatnou knihovnu procesoru kanálu změn.
Další informace najdete v tématu migrace z knihovny procesoru kanálu změn do sady .NET SDK služby Azure Cosmos DB v3.
Dotazy kanálu změn
Spouštění dotazů kanálu změn v sadě SDK v3 se považuje za použití modelu vyžádání kanálu změn. Pokud chcete migrovat konfiguraci, postupujte podle této tabulky:
.NET v2 SDK | Sada .NET v3 SDK |
---|---|
ChangeFeedOptions.PartitionKeyRangeId |
FeedRange - K dosažení paralelismu čtení kanálu změn FeedRanges lze použít. Už není povinným parametrem. Teď můžete jednoduše číst kanál změn pro celý kontejner . |
ChangeFeedOptions.PartitionKey |
FeedRange.FromPartitionKey – Kanál FeedRange představující požadovaný klíč oddílu lze použít ke čtení kanálu změn pro tuto hodnotu klíče oddílu. |
ChangeFeedOptions.RequestContinuation |
ChangeFeedStartFrom.Continuation - Iterátor kanálu změn lze kdykoli zastavit a obnovit uložením pokračování a jeho použitím při vytváření nového iterátoru. |
ChangeFeedOptions.StartTime |
ChangeFeedStartFrom.Time |
ChangeFeedOptions.StartFromBeginning |
ChangeFeedStartFrom.Beginning |
ChangeFeedOptions.MaxItemCount |
ChangeFeedRequestOptions.PageSizeHint - Iterátor kanálu změn lze kdykoli zastavit a obnovit uložením pokračování a jeho použitím při vytváření nového iterátoru. |
IDocumentQuery.HasMoreResults |
response.StatusCode == HttpStatusCode.NotModified - Kanál změn je koncepčně nekonečný, takže by mohlo být vždy více výsledků. Pokud odpověď obsahuje stavový HttpStatusCode.NotModified kód, znamená to, že v tuto chvíli nejsou k dispozici žádné nové změny. Můžete ho použít k zastavení a uložení pokračování nebo k dočasnému spánku nebo čekání a dalším voláním otestujte ReadNextAsync nové změny. |
Rozdělení zpracování | Při čtení kanálu změn už není nutné, aby uživatelé zpracovávali rozdělené výjimky, rozdělení se bude zpracovávat transparentně bez nutnosti interakce uživatele. |
Použití knihovny bulk executoru přímo ze sady SDK V3
Sada SDK v3 má integrovanou podporu pro knihovnu bulk executorů, která umožňuje používat stejnou sadu SDK pro sestavení aplikace a provádění hromadných operací. Dříve jste museli použít samostatnou knihovnu bulk executoru.
Další informace najdete v tématu migrace z knihovny Bulk Executor na hromadnou podporu v sadě .NET SDK služby Azure Cosmos DB v3.
Přizpůsobení serializace
Sada .NET SDK V2 umožňuje nastavení JsonSerializerSettings v RequestOptions na provozní úrovni použité k deserializaci výsledného dokumentu:
// .NET V2 SDK
var result = await container.ReplaceDocumentAsync(document, new RequestOptions { JsonSerializerSettings = customSerializerSettings })
Sada .NET SDK v3 poskytuje rozhraní serializátoru pro úplné přizpůsobení serializačního modulu nebo více obecných možností serializace v rámci konstrukce klienta.
Přizpůsobení serializace na úrovni operace lze dosáhnout pomocí rozhraní API streamu:
// .NET V3 SDK
using(Response response = await this.container.ReplaceItemStreamAsync(stream, "itemId", new PartitionKey("itemPartitionKey"))
{
using(Stream stream = response.ContentStream)
{
using (StreamReader streamReader = new StreamReader(stream))
{
// Read the stream and do dynamic deserialization based on type with a custom Serializer
}
}
}
Porovnání fragmentů kódu
Následující fragment kódu ukazuje rozdíly ve způsobu vytváření prostředků mezi sadami .NET v2 a v3 SDK:
Databázové operace
Vytvořit databázi
// Create database with no shared provisioned throughput
DatabaseResponse databaseResponse = await client.CreateDatabaseIfNotExistsAsync(DatabaseName);
Database database = databaseResponse;
DatabaseProperties databaseProperties = databaseResponse;
// Create a database with a shared manual provisioned throughput
string databaseIdManual = new string(DatabaseName + "_SharedManualThroughput");
database = await client.CreateDatabaseIfNotExistsAsync(databaseIdManual, ThroughputProperties.CreateManualThroughput(400));
// Create a database with shared autoscale provisioned throughput
string databaseIdAutoscale = new string(DatabaseName + "_SharedAutoscaleThroughput");
database = await client.CreateDatabaseIfNotExistsAsync(databaseIdAutoscale, ThroughputProperties.CreateAutoscaleThroughput(4000));
Čtení databáze podle ID
// Read a database
Console.WriteLine($"{Environment.NewLine} Read database resource: {DatabaseName}");
database = client.GetDatabase(DatabaseName);
Console.WriteLine($"{Environment.NewLine} database { database.Id.ToString()}");
// Read all databases
string findQueryText = "SELECT * FROM c";
using (FeedIterator<DatabaseProperties> feedIterator = client.GetDatabaseQueryIterator<DatabaseProperties>(findQueryText))
{
while (feedIterator.HasMoreResults)
{
FeedResponse<DatabaseProperties> databaseResponses = await feedIterator.ReadNextAsync();
foreach (DatabaseProperties _database in databaseResponses)
{
Console.WriteLine($"{ Environment.NewLine} database {_database.Id.ToString()}");
}
}
}
Odstranění databáze
// Delete a database
await client.GetDatabase(DatabaseName).DeleteAsync();
Console.WriteLine($"{ Environment.NewLine} database {DatabaseName} deleted.");
// Delete all databases in an account
string deleteQueryText = "SELECT * FROM c";
using (FeedIterator<DatabaseProperties> feedIterator = client.GetDatabaseQueryIterator<DatabaseProperties>(deleteQueryText))
{
while (feedIterator.HasMoreResults)
{
FeedResponse<DatabaseProperties> databaseResponses = await feedIterator.ReadNextAsync();
foreach (DatabaseProperties _database in databaseResponses)
{
await client.GetDatabase(_database.Id).DeleteAsync();
Console.WriteLine($"{ Environment.NewLine} database {_database.Id} deleted");
}
}
}
Operace s kontejnery
Vytvoření kontejneru (automatické škálování + doba provozu s vypršením platnosti)
private static async Task CreateManualThroughputContainer(Database database)
{
// Set throughput to the minimum value of 400 RU/s manually configured throughput
string containerIdManual = ContainerName + "_Manual";
ContainerResponse container = await database.CreateContainerIfNotExistsAsync(
id: containerIdManual,
partitionKeyPath: partitionKeyPath,
throughput: 400);
}
// Create container with autoscale
private static async Task CreateAutoscaleThroughputContainer(Database database)
{
string autoscaleContainerId = ContainerName + "_Autoscale";
ContainerProperties containerProperties = new ContainerProperties(autoscaleContainerId, partitionKeyPath);
Container container = await database.CreateContainerIfNotExistsAsync(
containerProperties: containerProperties,
throughputProperties: ThroughputProperties.CreateAutoscaleThroughput(autoscaleMaxThroughput: 4000);
}
// Create a container with TTL Expiration
private static async Task CreateContainerWithTtlExpiration(Database database)
{
string containerIdManualwithTTL = ContainerName + "_ManualTTL";
ContainerProperties properties = new ContainerProperties
(id: containerIdManualwithTTL,
partitionKeyPath: partitionKeyPath);
properties.DefaultTimeToLive = (int)TimeSpan.FromDays(1).TotalSeconds; //expire in 1 day
ContainerResponse containerResponse = await database.CreateContainerIfNotExistsAsync(containerProperties: properties);
ContainerProperties returnedProperties = containerResponse;
}
Čtení vlastností kontejneru
private static async Task ReadContainerProperties(Database database)
{
string containerIdManual = ContainerName + "_Manual";
Container container = database.GetContainer(containerIdManual);
ContainerProperties containerProperties = await container.ReadContainerAsync();
}
Odstranění kontejneru
private static async Task DeleteContainers(Database database)
{
string containerIdManual = ContainerName + "_Manual";
// Delete a container
await database.GetContainer(containerIdManual).DeleteContainerAsync();
// Delete all CosmosContainer resources for a database
using (FeedIterator<ContainerProperties> feedIterator = database.GetContainerQueryIterator<ContainerProperties>())
{
while (feedIterator.HasMoreResults)
{
foreach (ContainerProperties _container in await feedIterator.ReadNextAsync())
{
await database.GetContainer(_container.Id).DeleteContainerAsync();
Console.WriteLine($"{Environment.NewLine} deleted container {_container.Id}");
}
}
}
}
Operace položek a dotazů
Vytvoření položky
private static async Task CreateItemAsync(Container container)
{
// Create a SalesOrder POCO object
SalesOrder salesOrder1 = GetSalesOrderSample("Account1", "SalesOrder1");
ItemResponse<SalesOrder> response = await container.CreateItemAsync(salesOrder1,
new PartitionKey(salesOrder1.AccountNumber));
}
private static async Task RunBasicOperationsOnDynamicObjects(Container container)
{
// Dynamic Object
dynamic salesOrder = new
{
id = "SalesOrder5",
AccountNumber = "Account1",
PurchaseOrderNumber = "PO18009186470",
OrderDate = DateTime.UtcNow,
Total = 5.95,
};
Console.WriteLine("\nCreating item");
ItemResponse<dynamic> response = await container.CreateItemAsync<dynamic>(
salesOrder, new PartitionKey(salesOrder.AccountNumber));
dynamic createdSalesOrder = response.Resource;
}
Čtení všech položek v kontejneru
private static async Task ReadAllItems(Container container)
{
// Read all items in a container
List<SalesOrder> allSalesForAccount1 = new List<SalesOrder>();
using (FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
queryDefinition: null,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1"),
MaxItemCount = 5
}))
{
while (resultSet.HasMoreResults)
{
FeedResponse<SalesOrder> response = await resultSet.ReadNextAsync();
SalesOrder salesOrder = response.First();
Console.WriteLine($"\n1.3.1 Account Number: {salesOrder.AccountNumber}; Id: {salesOrder.Id}");
allSalesForAccount1.AddRange(response);
}
}
}
Dotazování položek
Změny v SqlQuerySpec (QueryDefinition v 3.0 SDK)
Třída SqlQuerySpec
v sadě SDK v2 byla nyní přejmenována na QueryDefinition
v sadě SDK v3.
SqlParameterCollection
a SqlParameter
byl odebrán. Parametry jsou nyní přidány do QueryDefinition
modelu tvůrce pomocí QueryDefinition.WithParameter
. Uživatelé mají přístup k parametrům pomocí QueryDefinition.GetQueryParameters
private static async Task QueryItems(Container container)
{
// Query for items by a property other than Id
QueryDefinition queryDefinition = new QueryDefinition(
"select * from sales s where s.AccountNumber = @AccountInput")
.WithParameter("@AccountInput", "Account1");
List<SalesOrder> allSalesForAccount1 = new List<SalesOrder>();
using (FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
queryDefinition,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1"),
MaxItemCount = 1
}))
{
while (resultSet.HasMoreResults)
{
FeedResponse<SalesOrder> response = await resultSet.ReadNextAsync();
SalesOrder sale = response.First();
Console.WriteLine($"\n Account Number: {sale.AccountNumber}; Id: {sale.Id};");
allSalesForAccount1.AddRange(response);
}
}
}
Odstranění položky
private static async Task DeleteItemAsync(Container container)
{
ItemResponse<SalesOrder> response = await container.DeleteItemAsync<SalesOrder>(
partitionKey: new PartitionKey("Account1"), id: "SalesOrder3");
}
Dotaz kanálu změn
private static async Task QueryChangeFeedAsync(Container container)
{
FeedIterator<SalesOrder> iterator = container.GetChangeFeedIterator<SalesOrder>(ChangeFeedStartFrom.Beginning(), ChangeFeedMode.Incremental);
string continuation = null;
while (iterator.HasMoreResults)
{
FeedResponse<SalesOrder> response = await iteratorForTheEntireContainer.ReadNextAsync();
if (response.StatusCode == HttpStatusCode.NotModified)
{
// No new changes
continuation = response.ContinuationToken;
break;
}
else
{
// Process the documents in response
}
}
}
Další kroky
- Vytvoření konzolové aplikace pro správu dat Azure Cosmos DB for NoSQL pomocí sady SDK v3
- Další informace o tom, co můžete dělat se sadou SDK v3
- Pokoušíte se naplánovat kapacitu migrace do služby Azure Cosmos DB?
- Pokud víte, že je počet virtuálních jader a serverů ve vašem existujícím databázovém clusteru, přečtěte si o odhadu jednotek žádostí pomocí virtuálních jader nebo virtuálních procesorů.
- Pokud znáte typické sazby požadavků pro vaši aktuální úlohu databáze, přečtěte si informace o odhadu jednotek žádostí pomocí plánovače kapacity služby Azure Cosmos DB.