Gestion des transactions dans Object Services (Entity Framework)

Object Services prend en charge l'inscription de transaction automatique. Cela signifie que les activités effectuées dans un contexte d'objet, telles que l'exécution de requêtes et l'enregistrement de modifications apportées aux données de la source de données, peuvent être isolées dans la source de données en exécutant l'opération dans le cadre d'une transaction System.Transactions. Les transactions sont utilisées avec Object Services pour effectuer les opérations suivantes :

  • Exécuter plusieurs opérations sur la source de données qui doivent être très cohérentes, comme les requêtes qui dépendent de l'issue positive de modifications d'objets.

  • Coordonner les modifications dans le contexte de l'objet avec d'autres opérations distribuées, comme l'envoi d'une notification par courrier électronique ou l'écriture dans une file d'attente de messages.

Les transactions qui requièrent l'inscription de gestionnaires de ressources supplémentaires sont appelées des transactions distribuées. Les transactions distribuées utilisent un Distributed Transaction Coordinator pour gérer les ressources requises pour réaliser la transaction. La promotion d'une transaction à un Distributed Transaction Coordinator peut être un processus relativement coûteux à établir et réaliser. Certains Gestionnaires des ressources, comme SQL Server 2005, prennent en charge le protocole de transaction PSPE (Promotable Single Phase Enlistment). Un Gestionnaire des ressources peut alors héberger une transaction qui peut ensuite, si nécessaire, être gérée par le Distributed Transaction Coordinator.

Pour plus d'informations, voir Traitement transactionnel dans la bibliothèque MSDN.

Vous devez tenir compte des points suivants lors de l'utilisation de transactions avec Object Services :

  • Seules les opérations sur la source de données peuvent faire l'objet d'une transaction. Les modifications apportées aux objets dans le contexte de l'objet ne font pas l'objet d'une transaction. Les modifications apportées aux objets dans le contexte sont visibles en dehors de la portée de la transaction.

  • Lorsque vous appelez la méthode SaveChanges, si une transaction en cours existe, Object Services utilise cette transaction pour les opérations sur la source de données. Sinon, il crée une transaction pour l'opération. Vous pouvez définir des transactions à l'aide de EntityTransaction, Transaction, ou TransactionScope.

    NoteRemarque

    Pour s'inscrire dans une transaction existante, Object Services peut fermer et rouvrir la connexion.

  • Lorsqu'Object Services crée une transaction pour une opération SaveChanges, les modifications apportées aux objets dans le contexte de l'objet ne sont pas acceptées tant que la transaction n'est pas terminée. Cela garantit la cohérence d'état entre le contexte de l'objet et la source de données.

  • Lorsque vous projetez de réessayer des opérations dans une transaction, vous devez vous assurer que l'état des objets dans le contexte n'est pas réinitialisé avant que la transaction soit effectuée. Pour ce faire, vous devez appeler la méthode SaveChanges avec une valeur false pour le paramètre acceptChangesDuringSave, puis appeler la méthode AcceptAllChanges uniquement à l'issue des autres opérations de la transaction. Pour plus d'informations, voir Procédure : gérer les transactions Object Services (Entity Framework).

  • Dans le cadre d'une nouvelle tentative avec des transactions coordonnées, vous pouvez appeler la méthode SaveChanges une seconde fois sans commencer par appeler la méthode AcceptAllChanges. Dans ce cas, Object Services essaiera d'appliquer de nouveau les mêmes modifications à la source de données.

Voir aussi

Concepts

Fournisseur EntityClient pour Entity Framework
Gestion des connexions dans Object Services (Entity Framework)

Autres ressources

Gestion du contexte de l'objet (Entity Framework)