在对象服务中管理事务(实体框架)

对象服务支持自动事务登记。这意味着通过在 System.Transactions 事务中执行操作,可以将在对象上下文中执行的活动(如在数据源中执行查询和保存对数据的更改)隔离在数据源中。对象服务使用事务来执行以下任务:

  • 对必须完全一致的数据源执行多个操作,如取决于是否成功完成对象更改的查询。

  • 与其他分布式操作(例如发送电子邮件通知或写入消息队列)协调对象上下文中的更改。

要求登记附加资源管理器的事务称为“分布式事务”**。分布式事务使用分布式事务协调器 (DTC) 来管理完成事务所需的资源。建立和完成事务向 DTC 的提升是一个相对耗费资源的过程。一些资源管理器(例如 SQL Server 2005)支持可提升的单阶段登记 (PSPE) 事务协议。这允许资源管理器承载可在以后必要时升级为由分布式事务协调器 (DTC) 来管理的事务。

有关更多信息,请参见 MSDN Library 中的事务处理

通过对象服务使用事务时应注意以下注意事项:

  • 仅对针对数据源的操作进行事务处理。对对象上下文中对象的更改不进行事务处理。在上下文中对对象的更改在事务范围以外可见。

  • 当调用 SaveChanges 时,如果当前事务存在,则对象服务将此事务用于对数据源进行的操作。否则,将为操作创建新事务。可以使用 EntityTransactionTransactionTransactionScope 来定义事务。

    Note注意

    为了在现有事务中进行登记,对象服务可能会关闭并重新打开连接。

  • 对象服务对 SaveChanges 操作创建新事务时,在事务完成之前,不接受在对象上下文中对对象的更改。这样可以确保对象上下文的状态与数据源一致。

  • 如果您计划在事务中重试操作,则必须要确保在事务完成之前,对象上下文中对象的状态没有重置。为此,必须调用 acceptChangesDuringSave 参数值为 falseSaveChanges,然后仅当事务中其他操作已成功完成后再调用 AcceptAllChanges。有关更多信息,请参见如何:管理对象服务事务(实体框架)

  • 作为使用协调的事务进行重试操作的一部分,可以再次调用 SaveChanges 而无需先调用 AcceptAllChanges。在这种情况下,对象服务将尝试对数据源重新应用相同的更改。

另请参见

概念

用于实体框架的 EntityClient 提供程序
管理对象服务中的连接(实体框架)

其他资源

管理对象上下文(实体框架)