Az alkalmazás migrálása az Azure Cosmos DB .NET SDK v3 használatára
A KÖVETKEZŐRE VONATKOZIK: NoSQL
Fontos
Az Azure Cosmos DB .NET SDK 3-mal kapcsolatos további információkért tekintse meg a kibocsátási megjegyzéseket, a .NET GitHub-adattárat, a .NET SDK v3 teljesítménytippeket és a hibaelhárítási útmutatót.
Ez a cikk kiemeli a meglévő .NET-alkalmazás frissítésének néhány szempontját az újabb Azure Cosmos DB .NET SDK v3 for API for NoSQL-re. Az Azure Cosmos DB .NET SDK v3 a Microsoft.Azure.Azure Cosmos DB névtérnek felel meg. Ha az alkalmazást az alábbi Azure Cosmos DB .NET SDK-k bármelyikéből migrálja, használhatja a dokumentumban megadott információkat:
- Azure Cosmos DB .NET-keretrendszer SDK v2 for API for NoSQL
- Azure Cosmos DB .NET Core SDK v2 for API for NoSQL
A cikkben található utasítások az alábbi külső kódtárak migrálásához is segítséget nyújtanak, amelyek most már az Azure Cosmos DB .NET SDK v3 for API for NoSQL részét képezik:
- .NET változáscsatorna processzortár 2.0
- .NET bulk executor library 1.1 vagy újabb
A .NET V3 SDK újdonságai
A v3 SDK számos használhatósági és teljesítménybeli fejlesztést tartalmaz, többek között a következőket:
- Intuitív programozási modell elnevezése
- .NET Standard 2.0 **
- Nagyobb teljesítmény stream API-támogatással
- Fluent hierarchia, amely felváltja az URI-gyár szükségességét
- Beépített támogatás a változáscsatorna processzortárához
- Beépített támogatás tömeges műveletekhez
- Modellezhető API-k a könnyebb egységtesztelés érdekében
- Tranzakciós köteg és Blazor-támogatás
- Csatlakoztatható szerializálók
- Nem particionált és automatikus méretezésű tárolók méretezése
** Az SDK a .NET Standard 2.0-t célozza meg, amely egyetlen .NET SDK-ra egyesíti a meglévő Azure Cosmos DB .NET-keretrendszer és a .NET Core SDK-t. A .NET SDK-t bármely olyan platformon használhatja, amely a .NET Standard 2.0-t implementálja, beleértve a .NET-keretrendszer 4.6.1+ és a .NET Core 2.0+ alkalmazásokat is.
A hálózatkezelés, az újrapróbálkozás logikája és az SDK alacsonyabb szintjei nagyrészt változatlanok maradnak.
Az Azure Cosmos DB .NET SDK v3 már nyílt forráskód. Üdvözöljük a lekéréses kérelmeket, és naplózási problémákat és visszajelzéseket követünk nyomon a GitHubon . Dolgozunk minden olyan funkción, amely javítja az ügyfélélményt.
Miért migrálunk a .NET v3 SDK-ra?
A számos használhatósági és teljesítménybeli fejlesztés mellett a legújabb SDK-ban végrehajtott új funkcióberuházások nem lesznek visszahordva a régebbi verziókra. A v2 SDK jelenleg karbantartási módban van. A legjobb fejlesztési élmény érdekében javasoljuk, hogy mindig az SDK legújabb támogatott verziójával kezdjen.
Főbb névváltozások v2 SDK-ról v3 SDK-ra
A .NET 3.0 SDK-n a következő névmódosítások lettek alkalmazva, hogy igazodjanak a NoSQL API api-elnevezési konvencióihoz:
DocumentClient
a átnevezveCosmosClient
Collection
a átnevezveContainer
Document
a átnevezveItem
A rendszer minden erőforrás-objektumot átnevez további tulajdonságokkal, amelyek tartalmazzák az erőforrás nevét az egyértelműség érdekében.
A főosztálynév néhány módosítása az alábbiak szerint változik:
.NET v2 SDK | .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 |
A .NET v3 SDK-n lecserélt osztályok
A 3.0 SDK-n a következő osztályok lettek lecserélve:
Microsoft.Azure.Documents.UriFactory
A Microsoft.Azure.Documents.UriFactory osztályt felváltotta a fluent kialakítás.
Container container = client.GetContainer(databaseName,containerName);
ItemResponse<SalesOrder> response = await this._container.CreateItemAsync(
salesOrder,
new PartitionKey(salesOrder.AccountNumber));
Microsoft.Azure.Documents.Document
Mivel a .NET v3 SDK lehetővé teszi, hogy a felhasználók egyéni szerializálási motort konfiguráljanak, nincs közvetlen csere a Document
típusra. A Newtonsoft.Json (alapértelmezett szerializációs motor) JObject
használatakor ugyanezek a funkciók érhetők el. Ha másik szerializálási motort használ, használhatja annak alap json-dokumentumtípusát (például JsonDocument
System.Text.Json esetén). A javaslat egy olyan C#-típus használata, amely az elemek sémáját tükrözi az általános típusok helyett.
Microsoft.Azure.Documents.Resource
Azokban az esetekben, amikor dokumentumokhoz használták , nincs közvetlen helyettesítés Resource
, kövesse a következő útmutatást Document
: .
Microsoft.Azure.Documents.AccessCondition
IfNoneMatch
vagy IfMatch
már közvetlenül elérhetőek Microsoft.Azure.Cosmos.ItemRequestOptions
.
Az elemazonosító-létrehozás módosítása
Az elemazonosító már nem lesz automatikusan kitöltve a .NET v3 SDK-ban. Ezért az elemazonosítónak kifejezetten tartalmaznia kell egy generált azonosítót. Tekintse meg a következő példát:
[JsonProperty(PropertyName = "id")]
public Guid Id { get; set; }
A kapcsolati mód alapértelmezett viselkedésének módosítása
Az SDK v3 mostantól alapértelmezés szerint Direct + TCP kapcsolati módra vált az előző v2 SDK-hoz képest, amely alapértelmezés szerint átjáró+ HTTPS-kapcsolati módokra lett beállítva. Ez a módosítás nagyobb teljesítményt és méretezhetőséget biztosít.
A FeedOptions (QueryRequestOptions in v3.0 SDK) változásai
Az FeedOptions
SDK v2 osztályát átnevezték az SDK v3-ra QueryRequestOptions
, és az osztályon belül több tulajdonság is módosult a névben és/vagy az alapértelmezett értékben, vagy teljesen el lett távolítva.
.NET v2 SDK | .NET v3 SDK |
---|---|
FeedOptions.MaxDegreeOfParallelism |
QueryRequestOptions.MaxConcurrency – Az alapértelmezett érték és a társított viselkedés változatlan marad, a párhuzamos lekérdezés végrehajtása során az ügyféloldali műveleteket a rendszer sorosan, párhuzamosság nélkül hajtja végre. |
FeedOptions.PartitionKey |
QueryRequestOptions.PartitionKey - Viselkedés megtartva. |
FeedOptions.EnableCrossPartitionQuery |
Eltávolított. Az SDK 3.0 alapértelmezett viselkedése az, hogy a rendszer a partíciók közötti lekérdezéseket anélkül hajtja végre, hogy külön engedélyeznie kellene a tulajdonságot. |
FeedOptions.PopulateQueryMetrics |
Eltávolított. Mostantól alapértelmezés szerint engedélyezve van, és a diagnosztika része. |
FeedOptions.RequestContinuation |
Eltávolított. A lekérdezési metódusok mostantól maguk is előléptetik. |
FeedOptions.JsonSerializerSettings |
Eltávolított. További információkért tekintse meg, hogyan szabhatja testre a szerializálást . |
FeedOptions.PartitionKeyRangeId |
Eltávolított. Ugyanez az eredmény érhető el a FeedRange lekérdezési módszer bemeneteként való használatával. |
FeedOptions.DisableRUPerMinuteUsage |
Eltávolított. |
Ügyfél létrehozása
A .NET SDK v3 egy olyan fluent osztályt CosmosClientBuilder
biztosít, amely felváltja az SDK v2 URI Factory szükségességét.
A fluent design belsőleg építi ki az URL-címeket, és lehetővé teszi, hogy egyetlen Container
objektum legyen átadva ahelyett, hogy egy DocumentClient
, DatabaseName
és DocumentCollection
.
Az alábbi példa egy újat CosmosClientBuilder
hoz létre erős konzisztenciaszinttel és az előnyben részesített helyek listájával:
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder(
accountEndpoint: "https://testcosmos.documents.azure.com:443/",
authKeyOrResourceToken: "SuperSecretKey")
.WithConsistencyLevel(ConsistencyLevel.Strong)
.WithApplicationRegion(Regions.EastUS);
CosmosClient client = cosmosClientBuilder.Build();
Kivételek
Ahol a v2 SDK a műveletek során a hibák jelzésére szolgál DocumentClientException
, a v3 SDK CosmosException
a , amely elérhetővé teszi a StatusCode
, Diagnostics
és egyéb válaszokkal kapcsolatos információkat. Az összes teljes információ szerializálva van a használat során ToString()
:
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();
}
Diagnosztika
Ha a v2 SDK-ban a tulajdonságon keresztül RequestDiagnosticsString
csak közvetlen diagnosztika érhető el, a v3 SDK Diagnostics
minden válaszban és kivételben elérhető, amely gazdagabb, és nem korlátozódik a Direct módra. Ezek nem csak a művelet SDK-ján töltött időt tartalmazzák, hanem a művelet által érintett régiókat is:
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
Egyes beállításokat ConnectionPolicy
átneveztek vagy lecseréltek a következőre CosmosClientOptions
:
.NET v2 SDK | .NET v3 SDK |
---|---|
EnableEndpointDiscovery |
LimitToEndpoint - Az érték most invertált, ha EnableEndpointDiscovery az érték van beállítva true , LimitToEndpoint akkor a következőre kell állítani: false . A beállítás használata előtt tisztában kell lenni azzal, hogy ez hogyan érinti az ügyfelet. |
ConnectionProtocol |
Eltávolított. A protokoll az átjáróhoz (HTTPS) vagy a directhez (TCP) van kötve. A HTTPS protokollt használó közvetlen mód már nem támogatott a V3 SDK-n, és a javaslat a TCP protokoll használata. |
MediaRequestTimeout |
Eltávolított. A mellékletek már nem támogatottak. |
SetCurrentLocation |
CosmosClientOptions.ApplicationRegion egyazon hatás elérésére használható. |
PreferredLocations |
CosmosClientOptions.ApplicationPreferredRegions egyazon hatás elérésére használható. |
UserAgentSuffix |
CosmosClientBuilder.ApplicationName egyazon hatás elérésére használható. |
UseMultipleWriteLocations |
Eltávolított. Az SDK automatikusan észleli, ha a fiók több írási végpontot is támogat. |
Indexelési szabályzat
Az indexelési házirendben nem lehet konfigurálni ezeket a tulajdonságokat. Ha nincs megadva, ezek a tulajdonságok mostantól mindig a következő értékekkel rendelkeznek:
Tulajdonság neve | Új érték (nem konfigurálható) |
---|---|
Kind |
range |
dataType |
String és Number |
Ebben a szakaszban az elérési utak belefoglalására és kizárására vonatkozó házirend-példák indexelését tekinti meg. A lekérdezési motor fejlesztései miatt ezeknek a tulajdonságoknak a konfigurálása, még ha régebbi SDK-verziót is használ, nincs hatással a teljesítményre.
Munkamenet-jogkivonat
Ha a v2 SDK közzétette a válasz munkamenet-jogkivonatát, mint ResourceResponse.SessionToken
azokban az esetekben, amikor a munkamenet-jogkivonat rögzítésére volt szükség, mivel a munkamenet-jogkivonat fejléc, a v3 SDK ezt az Headers.Session
értéket bármely válasz tulajdonságában elérhetővé teszi.
Időbélyegző
Ha a v2 SDK közzétette egy dokumentum időbélyegét a Timestamp
tulajdonságon keresztül, mivel Document
az már nem érhető el, a felhasználók a _ts
rendszertulajdonságot a modelljük egyik tulajdonságához rendelhetik.
OpenAsync
A v2 SDK-ügyfél CreateAndInitializeAsync
bemelegítéséhez használt használati esetekben OpenAsync()
v3 SDK-ügyfél létrehozása és bemelegítésére is használható.
A változáscsatorna-feldolgozó API-k használata közvetlenül a v3 SDK-ból
A v3 SDK beépített támogatást nyújt a Változáscsatorna-feldolgozó API-khoz, így ugyanazt az SDK-t használhatja az alkalmazás létrehozásához és a változáscsatorna processzor implementációjához. Korábban külön változáscsatorna-processzortárat kellett használnia.
További információ: migrálás a változáscsatorna processzortárából az Azure Cosmos DB .NET v3 SDK-ba
Hírcsatorna-lekérdezések módosítása
A változáscsatorna-lekérdezések v3 SDK-n való végrehajtása a változáscsatorna lekérési modelljét használja. A konfiguráció áttelepítéséhez kövesse ezt a táblázatot:
.NET v2 SDK | .NET v3 SDK |
---|---|
ChangeFeedOptions.PartitionKeyRangeId |
FeedRange - A párhuzamosság elérése érdekében a változáscsatorna FeedRanges használható. Ez már nem kötelező paraméter, most már egyszerűen elolvashatja egy teljes tároló változáscsatornáját. |
ChangeFeedOptions.PartitionKey |
FeedRange.FromPartitionKey – A kívánt partíciókulcsot jelképező FeedRange segítségével beolvasható az adott partíciókulcs-érték változáscsatornája. |
ChangeFeedOptions.RequestContinuation |
ChangeFeedStartFrom.Continuation - A változáscsatorna iterátora bármikor leálltatható és folytatható a folytatás mentésével és az új iterátor létrehozásakor való használatával. |
ChangeFeedOptions.StartTime |
ChangeFeedStartFrom.Time |
ChangeFeedOptions.StartFromBeginning |
ChangeFeedStartFrom.Beginning |
ChangeFeedOptions.MaxItemCount |
ChangeFeedRequestOptions.PageSizeHint - A változáscsatorna iterátora bármikor leálltatható és folytatható a folytatás mentésével és az új iterátor létrehozásakor való használatával. |
IDocumentQuery.HasMoreResults |
response.StatusCode == HttpStatusCode.NotModified - A változáscsatorna fogalmilag végtelen, így mindig több eredmény érhető el. Ha egy válasz tartalmazza az HttpStatusCode.NotModified állapotkódot, az azt jelenti, hogy jelenleg nem kell új módosításokat olvasni. Ezzel leállíthatja és mentheti a folytatást , illetve ideiglenesen alvó állapotba helyezheti vagy várakozhat, majd újra hívhatja ReadNextAsync , hogy tesztelje az új módosításokat. |
Felosztás kezelése | A változáscsatorna olvasása során a felhasználók már nem kötelesek felosztási kivételeket kezelni, a felosztások transzparens módon, felhasználói beavatkozás nélkül lesznek kezelve. |
A tömeges végrehajtói kódtár használata közvetlenül a V3 SDK-ból
A v3 SDK beépített támogatást nyújt a tömeges végrehajtói kódtárhoz, így ugyanazt az SDK-t használhatja az alkalmazás létrehozásához és a tömeges műveletek végrehajtásához. Korábban külön tömeges végrehajtói kódtárat kellett használnia.
További információ: migrálás a tömeges végrehajtói kódtárból az Azure Cosmos DB .NET V3 SDK tömeges támogatására
Szerializálás testreszabása
A .NET V2 SDK lehetővé teszi a JsonSerializerSettings beállítását a RequestOptionsban az eredménydokumentum deszerializálásához használt működési szinten:
// .NET V2 SDK
var result = await container.ReplaceDocumentAsync(document, new RequestOptions { JsonSerializerSettings = customSerializerSettings })
A .NET SDK v3 egy szerializáló felületet biztosít a szerializálási motor teljes testreszabásához, vagy általánosabb szerializálási lehetőségeket az ügyfélépítés részeként.
A szerializáció műveleti szinten történő testreszabása Stream API-k használatával érhető el:
// .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
}
}
}
Kódrészletek összehasonlítása
Az alábbi kódrészlet az erőforrások .NET v2 és v3 SDK-k közötti létrehozásának különbségeit mutatja be:
Adatbázis-műveletek
-adatbázis létrehozása
// 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));
Adatbázis beolvasása azonosító alapján
// 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()}");
}
}
}
Adatbázis törlése
// 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");
}
}
}
Tárolóműveletek
Tároló létrehozása (Automatikus skálázás + Lejárati idő)
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;
}
Tároló tulajdonságainak olvasása
private static async Task ReadContainerProperties(Database database)
{
string containerIdManual = ContainerName + "_Manual";
Container container = database.GetContainer(containerIdManual);
ContainerProperties containerProperties = await container.ReadContainerAsync();
}
Tároló törlése
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}");
}
}
}
}
Elem- és lekérdezési műveletek
Elem létrehozása
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;
}
A tároló összes elemének beolvasása
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);
}
}
}
Lekérdezési elemek
Az SqlQuerySpec módosítása (QueryDefinition in v3.0 SDK)
Az SqlQuerySpec
SDK v2 osztályát átnevezték az SDK v3-ra QueryDefinition
.
SqlParameterCollection
és SqlParameter
el lett távolítva. A paraméterek mostantól hozzáadódnak egy szerkesztőmodellhez a QueryDefinition
használatával QueryDefinition.WithParameter
. A felhasználók a paramétereket a következővel érhetik el: 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);
}
}
}
Elem törlése
private static async Task DeleteItemAsync(Container container)
{
ItemResponse<SalesOrder> response = await container.DeleteItemAsync<SalesOrder>(
partitionKey: new PartitionKey("Account1"), id: "SalesOrder3");
}
Változáscsatorna-lekérdezés
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
}
}
}
Következő lépések
- Konzolalkalmazás létrehozása az Azure Cosmos DB for NoSQL-adatok kezeléséhez a v3 SDK használatával
- További információ a v3 SDK-val elvégezhető műveletekről
- Kapacitástervezést szeretne végezni az Azure Cosmos DB-be való migráláshoz?
- Ha csak annyit tud, hogy hány virtuális mag és kiszolgáló található a meglévő adatbázisfürtben, olvassa el a kérelemegységek becslését virtuális magok vagy vCPU-k használatával
- Ha ismeri az aktuális adatbázis számítási feladataira vonatkozó tipikus kérési arányokat, olvassa el a kérelemegységek becslését az Azure Cosmos DB kapacitástervezővel