事务将多个任务绑定在一起。例如,假设某个应用程序执行两个任务。它首先在数据库中创建一个新表。接着调用专用对象收集和格式化数据,并在新表中插入数据。这两个任务是相关甚至相互依赖的,因此除非可用数据填充表,否则应避免创建新表。在一个事务范围内执行两个任务会加强两者之间的关系。如果第二个任务失败,则第一个任务回滚到创建新表前的点。
为了确保可预知的行为,所有事务都必须处理基本 ACID 属性(原子、一致性、隔离和持久性)。这些属性加强了关键任务事务作为“全或无”命题的作用。总之,ACID 确保一组相关任务作为一个单元成功或失败。在事务处理术语中,事务要么提交,要么中止。要提交事务,所有参与者都必须保证对数据的任何更改将是永久的。不论系统崩溃或是发生其他无法预料的事件,更改都必须是持久的。只要有一个参与者无法做出此保证,整个事务就会失败。事务范围内的所有数据更改将回滚到特定设置点。
可将事务限制到一个数据资源,如数据库或消息队列。在此情况下,本地事务由 System.Transactions 提供的事务管理器管理,这将提高性能。这些事务由数据资源控制,管理起来轻松高效。
事务还可以跨越多个数据资源。分布式事务使您能够将在不同系统上发生的若干不同操作合并为单个的成功或失败操作。在此情况下,事务由驻留在各系统中的 Microsoft 分布式系统协调器 (MSDTC) 协调。
在您使用 System.Transactions 提供的类开发事务性应用程序时,就不必为所需要的事务类型或涉及的事务管理器而操心了。System.Transactions 基础结构自动为您管理它们。
在您创建事务时,可以指定应用于事务的隔离级别。该隔离级别由 IsolationLevel 类定义,用于确定其他事务将对您的事务影响的数据具有哪一访问级别。
您可以使用 ADO.NET、System.EnterpriseServices 或 System.Transactions 命名空间提供的新事务性编程模型创建事务。