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