

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# DBContext Classe Dynamo issue du modèle de persistance des objets .NET
<a name="DotNetDynamoDBContext"></a>

La classe `DynamoDBContext` est le point d’entrée de la base de données Amazon DynamoDB. Elle fournit une connexion à DynamoDB, et vous permet d’accéder à vos données dans diverses tables, d’effectuer diverses opérations CRUD, ainsi que d’exécuter des requêtes. La classe `DynamoDBContext` fournit les méthodes suivantes.

**Topics**
+ [Créez MultiTable BatchGet](#w2aac17b9c21c23c39b7)
+ [Créez MultiTable BatchWrite](#w2aac17b9c21c23c39b9)
+ [CreateBatchGet](#w2aac17b9c21c23c39c11)
+ [CreateBatchWrite](#w2aac17b9c21c23c39c13)
+ [Suppression](#w2aac17b9c21c23c39c15)
+ [Dispose](#w2aac17b9c21c23c39c17)
+ [ExecuteBatchGet](#w2aac17b9c21c23c39c19)
+ [ExecuteBatchWrite](#w2aac17b9c21c23c39c21)
+ [FromDocument](#w2aac17b9c21c23c39c23)
+ [FromQuery](#w2aac17b9c21c23c39c25)
+ [FromScan](#w2aac17b9c21c23c39c27)
+ [GetTargetTable](#w2aac17b9c21c23c39c29)
+ [Equilibreur de](#w2aac17b9c21c23c39c31)
+ [Query](#w2aac17b9c21c23c39c33)
+ [Enregistrer](#w2aac17b9c21c23c39c35)
+ [Analyser](#w2aac17b9c21c23c39c37)
+ [ToDocument](#w2aac17b9c21c23c39c39)
+ [Spécification de paramètres facultatifs pour Dynamo DBContext](#OptionalConfigParams)

## Créez MultiTable BatchGet
<a name="w2aac17b9c21c23c39b7"></a>

Crée un objet `MultiTableBatchGet` composé de plusieurs objets `BatchGet`. Chacun de ces objets `BatchGet` peut être utilisé pour récupérer des éléments d’une table DynamoDB.

Pour récupérer les éléments des tables, utilisez la méthode `ExecuteBatchGet` en passant l’objet `MultiTableBatchGet` en tant que paramètre.

## Créez MultiTable BatchWrite
<a name="w2aac17b9c21c23c39b9"></a>

Crée un objet `MultiTableBatchWrite` composé de plusieurs objets `BatchWrite`. Chacun de ces objets `BatchWrite` peut être utilisé pour écrire ou supprimer des éléments dans une table DynamoDB.

Pour écrire dans des tables, utilisez la méthode `ExecuteBatchWrite` en passant l’objet `MultiTableBatchWrite` en tant que paramètre.

## CreateBatchGet
<a name="w2aac17b9c21c23c39c11"></a>

Crée un objet `BatchGet` que vous pouvez utiliser pour extraire plusieurs éléments d’une table. 

## CreateBatchWrite
<a name="w2aac17b9c21c23c39c13"></a>

Crée un objet `BatchWrite` que vous pouvez utiliser pour insérer plusieurs éléments dans une table ou supprimer plusieurs éléments d’une table. 

## Suppression
<a name="w2aac17b9c21c23c39c15"></a>

Supprime un élément de la table. La méthode requiert la clé primaire de l’élément que vous souhaitez supprimer. Vous pouvez fournir en tant que paramètre à cette méthode la valeur de clé primaire ou un objet côté client contenant une valeur de clé primaire.
+ Si vous spécifiez un objet côté client en tant que paramètre et avez activé le verrouillage optimiste, la suppression ne réussit que si les versions côté client et côté serveur de l’objet correspondent.
+ Si vous spécifiez uniquement la valeur de clé primaire en tant que paramètre, la suppression réussit, que vous ayez activé ou non le verrouillage optimiste.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `DeleteAsync` à la place.

## Dispose
<a name="w2aac17b9c21c23c39c17"></a>

Élimine toutes les ressources gérées et non gérées.

## ExecuteBatchGet
<a name="w2aac17b9c21c23c39c19"></a>

Lit les données d’une ou plusieurs tables, en traitant tous les objets `BatchGet` en un objet `MultiTableBatchGet`.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `ExecuteBatchGetAsync` à la place.

## ExecuteBatchWrite
<a name="w2aac17b9c21c23c39c21"></a>

Ecrit ou supprime des données dans une ou plusieurs tables, en traitant tous les objets `BatchWrite` en un objet `MultiTableBatchWrite`.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `ExecuteBatchWriteAsync` à la place.

## FromDocument
<a name="w2aac17b9c21c23c39c23"></a>

Pour une instance de `Document`, la méthode `FromDocument` renvoie une instance d'une classe côté client.

Ceci est utile si vous souhaitez utiliser les classes de modèle de document avec le modèle de persistance des objets pour effectuer des opérations de données. Pour plus d'informations sur les classes de modèles de documents fournies par le AWS SDK pour .NET, consultez[Utilisation du modèle de document .NET dans DynamoDB](DotNetSDKMidLevel.md).

Supposons que vous ayez un objet `Document` nommé `doc` qui contient une représentation d’un l’élément `Forum`. (Pour voir comment construire cet objet, consultez la description de la méthode `ToDocument`, plus loin dans cette rubrique. Vous pouvez utiliser le paramètre `FromDocument` pour récupérer l’élément `Forum` à partir de `Document`, comme illustré dans l’exemple de code C\$1 suivant.

**Example**  

```
forum101 = context.FromDocument<Forum>(101);
```

**Note**  
Si votre objet `Document` implémente l’interface `IEnumerable`, vous pouvez utiliser la méthode `FromDocuments` à la place. Cela vous permet d'itérer sur toutes les instances de classe dans le `Document`.

## FromQuery
<a name="w2aac17b9c21c23c39c25"></a>

Exécute une opération `Query` avec les paramètres de requête définis dans un objet `QueryOperationConfig`.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `FromQueryAsync` à la place.

## FromScan
<a name="w2aac17b9c21c23c39c27"></a>

Exécute une opération `Scan` avec les paramètres d'analyse définis dans un objet `ScanOperationConfig`.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `FromScanAsync` à la place.

## GetTargetTable
<a name="w2aac17b9c21c23c39c29"></a>

Récupère la table cible pour le type spécifié. Ceci est utile si vous écrivez un convertisseur personnalisé pour mapper des données arbitraires à une table DynamoDB, et devez déterminer la table associée à un type de données personnalisé.

## Equilibreur de
<a name="w2aac17b9c21c23c39c31"></a>

Récupère un élément dans une table. La méthode requiert uniquement la clé primaire de l’élément que vous souhaitez extraire. 

Par défaut, DynamoDB renvoie l’élément ayant des valeurs éventuellement cohérentes. Pour plus d’informations sur le modèle de cohérence éventuelle, consultez [Cohérence en lecture DynamoDB](HowItWorks.ReadConsistency.md).

`Load`ou la `LoadAsync` méthode appelle l'[GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html)opération, qui vous oblige à spécifier la clé primaire de la table. Comme `GetItem` ignore le paramètre `IndexName`, vous ne pouvez pas charger un élément à l’aide de la partition ou de la clé de tri d’un index. Vous devez donc utiliser la clé primaire de la table pour charger un élément.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `LoadAsync` à la place. Pour voir un exemple d’utilisation de la méthode `LoadAsync` pour effectuer des opérations CRUD de haut niveau sur une table DynamoDB, consultez l’exemple suivant.

```
    /// <summary>
    /// Shows how to perform high-level CRUD operations on an Amazon DynamoDB
    /// table.
    /// </summary>
    public class HighLevelItemCrud
    {
        public static async Task Main()
        {
            var client = new AmazonDynamoDBClient();
            DynamoDBContext context = new DynamoDBContext(client);
            await PerformCRUDOperations(context);
        }

        public static async Task PerformCRUDOperations(IDynamoDBContext context)
        {
            int bookId = 1001; // Some unique value.
            Book myBook = new Book
            {
                Id = bookId,
                Title = "object persistence-AWS SDK for.NET SDK-Book 1001",
                Isbn = "111-1111111001",
                BookAuthors = new List<string> { "Author 1", "Author 2" },
            };

            // Save the book to the ProductCatalog table.
            await context.SaveAsync(myBook);

            // Retrieve the book from the ProductCatalog table.
            Book bookRetrieved = await context.LoadAsync<Book>(bookId);

            // Update some properties.
            bookRetrieved.Isbn = "222-2222221001";

            // Update existing authors list with the following values.
            bookRetrieved.BookAuthors = new List<string> { " Author 1", "Author x" };
            await context.SaveAsync(bookRetrieved);

            // Retrieve the updated book. This time, add the optional
            // ConsistentRead parameter using DynamoDBContextConfig object.
            await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            // Delete the book.
            await context.DeleteAsync<Book>(bookId);

            // Try to retrieve deleted book. It should return null.
            Book deletedBook = await context.LoadAsync<Book>(bookId, new DynamoDBContextConfig
            {
                ConsistentRead = true,
            });

            if (deletedBook == null)
            {
                Console.WriteLine("Book is deleted");
            }
        }
    }
```

## Query
<a name="w2aac17b9c21c23c39c33"></a>

Interroge une table sur la base des paramètres de requête que vous fournissez.

Vous pouvez interroger une table uniquement si elle comporte une clé primaire composite (clé de partition et clé de tri). Lors de l’interrogation, vous devez spécifier une clé de partition et une condition qui s’applique à la clé de tri.

Supposons que vous disposez d’une classe `Reply` côté client mappée à la table `Reply` dans DynamoDB. L’exemple de code C\$1 suivant interroge la table `Reply` pour trouver les réponses des unités d’exécution de forum publiées au cours des 15 derniers jours. La table `Reply` possède une clé primaire qui a la clé de partition `Id` et la clé de tri `ReplyDateTime`.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

string replyId = "DynamoDB#DynamoDB Thread 1"; //Partition key
DateTime twoWeeksAgoDate = DateTime.UtcNow.Subtract(new TimeSpan(14, 0, 0, 0)); // Date to compare.
IEnumerable<Reply> latestReplies = context.Query<Reply>(replyId, QueryOperator.GreaterThan, twoWeeksAgoDate);
```

Ceci renvoie une collection d’objets `Reply`. 

La méthode `Query` renvoie une collection `IEnumerable` « avec chargement différé ». Elle ne renvoie initialement qu’une seule page de résultats puis effectue un appel de service pour la page suivante si nécessaire. Pour obtenir tous les éléments correspondants, vous devez itérer uniquement sur la collection `IEnumerable`.

Si votre table possède une clé primaire simple (clé de partition), vous ne pouvez pas utiliser la méthode `Query`. Au lieu de cela, vous pouvez utiliser la méthode `Load` et fournir la clé de partition pour récupérer l’élément.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `QueryAsync` à la place.

## Enregistrer
<a name="w2aac17b9c21c23c39c35"></a>

Enregistre l’objet spécifié dans la table. Si la clé primaire spécifiée dans l’objet d’entrée n’existe pas dans la table, la méthode ajoute un nouvel élément à celle-ci. Si la clé primaire existe, la méthode met à jour l’élément existant.

Si le verrouillage optimiste est configuré, la mise à jour ne réussit que si les versions client et serveur de l’élément correspondent. Pour de plus amples informations, veuillez consulter [Verrouillage optimiste à l'aide de DynamoDB et du modèle de persistance des objets AWS SDK pour .NET](DynamoDBContext.VersionSupport.md).

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `SaveAsync` à la place.

## Analyser
<a name="w2aac17b9c21c23c39c37"></a>

Effectue une analyse de la table toute entière. 

Vous pouvez filtrer les résultats d’analyse en spécifiant une condition d’analyse. La condition peut être évaluée sur n’importe quel attribut dans la table. Supposons que vous disposez d’une classe `Book` côté client mappée à la table `ProductCatalog` dans DynamoDB. L’exemple C \$1 suivant analyse la table et renvoie uniquement les éléments livre dont le prix est inférieur à 0.

**Example**  

```
IEnumerable<Book> itemsWithWrongPrice = context.Scan<Book>(
                    new ScanCondition("Price", ScanOperator.LessThan, price),
                    new ScanCondition("ProductCategory", ScanOperator.Equal, "Book")
      );
```

La méthode `Scan` renvoie une collection `IEnumerable` « avec chargement différé ». Elle ne renvoie initialement qu’une seule page de résultats puis effectue un appel de service pour la page suivante si nécessaire. Pour obtenir tous les éléments correspondants, vous devez seulement itérer sur la collection `IEnumerable`.

Pour des raisons de performance, vous devez interroger vos tables et éviter une analyse de table.

**Note**  
Pour effectuer cette opération en arrière-plan, utilisez la méthode `ScanAsync` à la place.

## ToDocument
<a name="w2aac17b9c21c23c39c39"></a>

Renvoie une instance de la classe de modèle de document `Document` de votre instance de classe. 

Ceci est utile si vous souhaitez utiliser les classes de modèle de document avec le modèle de persistance des objets pour effectuer des opérations de données. Pour plus d'informations sur les classes de modèles de documents fournies par le AWS SDK pour .NET, consultez[Utilisation du modèle de document .NET dans DynamoDB](DotNetSDKMidLevel.md). 

Supposons que vous disposez d’une classe côté client mappée à l’exemple de table `Forum`. Vous pouvez ensuite utiliser un `DynamoDBContext` pour obtenir un élément en tant qu’objet `Document` à partir de la table `Forum`, comme illustré dans l’exemple de code C\$1 suivant.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);

Forum forum101 = context.Load<Forum>(101); // Retrieve a forum by primary key.
Document doc = context.ToDocument<Forum>(forum101);
```

## Spécification de paramètres facultatifs pour Dynamo DBContext
<a name="OptionalConfigParams"></a>

Lors de l’utilisation du modèle de persistance des objets, vous pouvez spécifier les paramètres facultatifs suivants pour le `DynamoDBContext`.
+ **`ConsistentRead` – **Lors de la récupération de données à l’aide des opérations `Load`, `Query` ou `Scan`, vous pouvez ajouter ce paramètre facultatif pour demander les dernières valeurs pour les données.
+ **`IgnoreNullValues` – **Ce paramètre informe `DynamoDBContext` d’ignorer les valeurs null sur les attributs lors d’une opération `Save`. Si ce paramètre a la valeur false (ou s’il n’est pas défini), une valeur null est interprétée comme une directive pour supprimer l’attribut spécifique. 
+ **`SkipVersionCheck` – **Ce paramètre informe `DynamoDBContext` ne pas comparer les versions lors de l’enregistrement ou de la suppression d’un élément. Pour plus d’informations sur la gestion des versions, consultez [Verrouillage optimiste à l'aide de DynamoDB et du modèle de persistance des objets AWS SDK pour .NET](DynamoDBContext.VersionSupport.md).
+ **`TableNamePrefix` – **Préfixe tous les noms de table avec une chaîne spécifique. Si ce paramètre a la valeur null (ou s’il n’est pas défini), aucun préfixe n’est utilisé.
+ `DynamoDBEntryConversion` – Spécifie le schéma de conversion utilisé par le client. Vous pouvez définir ce paramètre sur la version V1 ou V2. V1 est la version par défaut.

  En fonction de la version que vous définissez, le comportement de ce paramètre change. Par exemple :
  + Dans la version 1, le type de données `bool` est converti en type numérique `N`, où 0 représente false et 1 représente true. Dans la version 2, `bool` est converti en `BOOL`.
  + Dans la version 2, les listes et les tableaux ne sont pas regroupés avec HashSets. Les listes et tableaux de nombres, de types basés sur des chaînes et de types binaires sont convertis en type `L` (Liste), qui peut être envoyé vide pour mettre à jour une liste. Ce n’est pas le cas de la version 1, dans laquelle une liste vide n’est pas envoyée sur le réseau.

    Dans la version 1, les types de collection, tels que List HashSet, et les tableaux sont traités de la même manière. La liste et le tableau de chiffres sont convertis au type `NS` (ensemble de nombres). HashSet 

  L’exemple suivant définit la version du schéma de conversion sur V2, ce qui modifie le comportement de conversion entre les types .NET et les types de données DynamoDB.

  ```
  var config = new DynamoDBContextConfig
  {
      Conversion = DynamoDBEntryConversion.V2
  };
  var contextV2 = new DynamoDBContext(client, config);
  ```

L’exemple de code C\$1 suivant crée un nouveau `DynamoDBContext` en spécifiant deux des paramètres facultatifs précédents, `ConsistentRead` et `SkipVersionCheck`.

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context =
       new DynamoDBContext(client, new DynamoDBContextConfig { ConsistentRead = true, SkipVersionCheck = true});
```

`DynamoDBContext` inclut ces paramètres facultatifs avec chaque demande que vous envoyez à l’aide de ce contexte. 

Au lieu de définir ces paramètres au niveau de `DynamoDBContext`, vous pouvez les spécifier pour des opérations individuelles que vous exécutez à l’aide de `DynamoDBContext`, comme illustré dans l’exemple de code C\$1 suivant. L’exemple charge un élément livre spécifique. La méthode `Load` de `DynamoDBContext` spécifie les paramètres facultatifs précédents, `ConsistentRead` et `SkipVersionCheck`.

**Example**  

```
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
...
DynamoDBContext context = new DynamoDBContext(client);
Book bookItem = context.Load<Book>(productId,new DynamoDBContextConfig{ ConsistentRead = true, SkipVersionCheck = true });
```

Dans ce cas, `DynamoDBContext` inclut ces paramètres uniquement lors de l’envoi de la demande `Get`.