

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.

# Verrouillage optimiste à l'aide de DynamoDB et du modèle de persistance des objets AWS SDK pour .NET
<a name="DynamoDBContext.VersionSupport"></a>

La prise en charge du verrouillage optimiste dans le modèle de persistance des objets garantit que la version de l’élément pour votre application est identique à la version de l’élément côté serveur avant de mettre à jour ou de supprimer l’élément. Supposons que vous récupérez un élément à mettre à jour. Toutefois, avant de renvoyer vos mises à jour, une autre application met à jour le même élément. Maintenant, votre demande a une copie obsolète de l’élément. A défaut de verrouillage optimiste, toute mise à jour que vous effectuez remplace la mise à jour effectuée par l’autre application. 

La fonction de verrouillage optimiste du modèle de persistance des objets fournit l’étiquette `DynamoDBVersion` que vous pouvez utiliser pour activer le verrouillage optimiste. Pour utiliser cette fonctionnalité, vous ajoutez une propriété à votre classe pour stocker le numéro de version. Vous ajoutez l’attribut `DynamoDBVersion` à la propriété. Lorsque vous enregistrez l’objet pour la première fois, le `DynamoDBContext` attribue un numéro de version et incrémente cette valeur chaque fois que vous mettez à jour l’élément. 

Votre demande de mise à jour ou de suppression aboutit uniquement si la version de l’objet côté client correspond au numéro de version de l’élément côté serveur. Si votre application a une copie obsolète de l’élément, elle doit obtenir du serveur la dernière version de l’élément avant de pouvoir le mettre à jour ou le supprimer.

L’exemple de code C\$1 suivant définit une classe `Book` avec des attributs de persistance des objets qui la mappent à la table `ProductCatalog`. La propriété `VersionNumber` dans la classe décorée avec l’attribut `DynamoDBVersion` stocke la valeur du numéro de version.

**Example**  

```
[DynamoDBTable("ProductCatalog")]
  public class Book
  {
    [DynamoDBHashKey]   //Partition key
    public int Id { get; set; }
    [DynamoDBProperty]
    public string Title { get; set; }
    [DynamoDBProperty]
    public string ISBN { get; set; }
    [DynamoDBProperty("Authors")]
    public List<string> BookAuthors { get; set; }
    [DynamoDBVersion]
    public int? VersionNumber { get; set; }
  }
```

**Note**  
Vous pouvez appliquer l’attribut `DynamoDBVersion` uniquement à un type primitif numérique nullable (tel que `int?`). 

Le verrouillage optimiste a l’impact suivant sur les opérations `DynamoDBContext` :
+ Pour un nouvel élément, `DynamoDBContext` attribue le numéro de version initial 0. Si vous récupérez un élément existant, mettez à jour une ou plusieurs de ses propriétés, puis tentez d’enregistrer les modifications, l’opération d’enregistrement n’aboutit que si les numéros de version côté client et côté serveur correspondent. `DynamoDBContext` incrémente le numéro de version. Vous n’avez pas besoin de définir le numéro de version.
+ La méthode `Delete` fournit des surcharges pouvant prendre une valeur de clé primaire ou un objet en tant que paramètre, comme illustré dans l’exemple de code C\$1 suivant.  
**Example**  

  ```
  DynamoDBContext context = new DynamoDBContext(client);
  ...
  // Load a book.
  Book book = context.Load<ProductCatalog>(111);
  // Do other operations.
  // Delete 1 - Pass in the book object.
  context.Delete<ProductCatalog>(book);
  
  // Delete 2 - Pass in the Id (primary key)
  context.Delete<ProductCatalog>(222);
  ```

  Si vous fournissez un objet en tant que paramètre, la suppression ne réussit que si la version de l’objet correspond à la version de l’élément côté serveur. Toutefois, si vous fournissez une valeur de clé primaire en tant que paramètre, `DynamoDBContext` ne connaît aucun numéro de version, et supprime l’élément sans effectuer la vérification de version. 

  Notez que l’implémentation interne du verrouillage optimiste dans le code du modèle de persistance des objets utilise les actions d’API de mise à jour conditionnelle et de suppression conditionnelle dans DynamoDB.

## Désactivation du verrouillage optimiste
<a name="DotNetDynamoDBContext.DisablingOptimisticLocking"></a>

Pour désactiver le verrouillage optimiste, utilisez la propriété de configuration `SkipVersionCheck`. Vous pouvez définir cette propriété lors de la création de `DynamoDBContext`. Dans ce cas, le verrouillage optimiste est désactivé pour toutes les demandes que vous effectuez à l’aide du contexte. Pour de plus amples informations, veuillez consulter [Spécification de paramètres facultatifs pour Dynamo DBContext](DotNetDynamoDBContext.md#OptionalConfigParams). 

Au lieu de définir la propriété au niveau du contexte, vous pouvez désactiver le verrouillage optimiste pour une opération spécifique, comme dans l’exemple de code C\$1 suivant. L’exemple utilise le contexte pour supprimer un élément livre. La méthode `Delete` définit la propriété `SkipVersionCheck` sur true, ce qui a pour effet de désactiver la vérification de version.

**Example**  

```
DynamoDBContext context = new DynamoDBContext(client);
// Load a book.
Book book = context.Load<ProductCatalog>(111);
...
// Delete the book.
context.Delete<Book>(book, new DynamoDBContextConfig { SkipVersionCheck = true });
```