Dans le cadre d'entité (EF), la gestion des transactions ne nécessite généralement que la moindre opération manuelle. En passant False à SavEchanges (), le cadre sera établi ou participera aux transactions. Après l'exécution réussie, AcceptAllChanges () soumettra et effectuera les modifications de la transaction.
Cependant, certains scénarios peuvent bénéficier de l'utilisation de SaveChanges (FAUX) et AcceptAllChanges () en même temps. Leur principal avantage est qu'il implique une affaire distribuée qui implique plusieurs contextes.
Considérez le code de code suivant:
Si context1.saveChanges () ne parvient pas à exécuter avec succès, context2.SaveChanges () échoue, toute la transaction distribuée sera suspendue. Malheureusement, EF a rejeté les changements dans le contexte1 et ne peut pas récupérer ou enregistrer efficacement les erreurs.
<code>using (TransactionScope scope = new TransactionScope()) { // 对 context1 执行操作 // 对 context2 执行操作 // 保存并丢弃更改 context1.SaveChanges(); // 保存并丢弃更改 context2.SaveChanges(); // 如果执行到这里,则一切看起来都很正常。 scope.Complete(); }</code>
Afin de résoudre ce problème, veuillez utiliser les méthodes modifiées suivantes:
Cette modification permet uniquement aux deux contextes de soumettre leurs modifications uniquement après le succès de la transaction. Si des anomalies se produisent, le changement sera conservé dans le objetStateManager ci-dessus et ci-dessous pour un traitement ultérieur, tels que des journaux de réessayer ou d'enregistrer.
<code>using (TransactionScope scope = new TransactionScope()) { // 对 context1 执行操作 // 对 context2 执行操作 // 保存更改,但不要立即丢弃 context1.SaveChanges(false); // 保存更改,但不要立即丢弃 context2.SaveChanges(false); // 如果执行到这里,则一切看起来都很正常。 scope.Complete(); context1.AcceptAllChanges(); context2.AcceptAllChanges(); }</code>
Par conséquent, SaveChaanges (False) et AcceptAllChanges () offrent une plus grande flexibilité dans les scénarios de transaction distribués, qui peuvent réparer et enregistrer les journaux lorsqu'ils sont défectueux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!