エンティティフレームワーク(EF)では、トランザクション管理は通常、手動操作が最も少ないだけです。 SaveChanges()にFalseを渡すことにより、フレームワークが確立またはトランザクションに参加します。実行が成功した後、AcceptAllChanges()はトランザクションの変更を送信および完了します。
ただし、一部のシナリオは、SaveChanges(False)とAcceptAllChanges()を同時に使用することでメリットがあります。彼らの主な利点は、複数のコンテキストを含む分配された問題を含むことです。次のコードコードを検討してください:
context1.savechanges()が正常に実行できなかった場合、context2.savechanges()fails、分散トランザクション全体が停止されます。残念ながら、EFはコンテキスト1の変更を破棄しており、エラーを回復したり、効果的に記録したりすることはできません。
<code>using (TransactionScope scope = new TransactionScope()) { // 对 context1 执行操作 // 对 context2 执行操作 // 保存并丢弃更改 context1.SaveChanges(); // 保存并丢弃更改 context2.SaveChanges(); // 如果执行到这里,则一切看起来都很正常。 scope.Complete(); }</code>
この変更により、2つのコンテキストのみが、トランザクションが成功した後にのみ変更を送信できます。異常が発生した場合、変更や記録ログなどのさらなる処理のために、変更はObjectStateManagerの上下に保持されます。
したがって、SaveChaanges(false)およびAcceptAllChanges()は、分散トランザクションシナリオの柔軟性を高めます。
以上がEFのSaveChanges(False)およびAcceptAllChanges():分散トランザクションにいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。