Verrouillage optimiste utilisant un numéro de version avec DynamoDB utilisant le modèle de persistance des objets AWS SDK for .NET - Amazon DynamoDB

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 utilisant un numéro de version avec DynamoDB utilisant le modèle de persistance des objets AWS SDK for .NET

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# 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.

Exemple
[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# suivant.

    Exemple
    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

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 plus d’informations, consultez Spécification de paramètres facultatifs pour DynamoDBContext .

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# 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.

Exemple
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 });