LINQ to SQL 支持三个不同的事务模型。 下面列出了这些模型,按执行检查的顺序。
显式本地事务
当调用SubmitChanges时,如果Transaction属性被设置为一个(IDbTransaction
)事务,则SubmitChanges将在同一事务的上下文中执行。
成功执行事务后,要由你来提交或回滚事务。 与事务对应的连接必须与用于构造事务的连接 DataContext匹配。 如果使用其他连接,则会引发异常。
显式可分发事务
可以在活动 SubmitChanges 的作用域中调用 LINQ to SQL API(包括但不限于 Transaction)。 LINQ to SQL 检测到调用在事务范围内,并且不会创建新事务。 LINQ to SQL 也避免在这种情况下关闭连接。 您可以在此类事务的上下文中执行查询和 SubmitChanges 操作。
隐式事务
调用SubmitChanges时,LINQ to SQL 会检查调用是否在某个Transaction范围内,或者Transaction
属性(IDbTransaction
)是否已设置为用户启动的本地事务。 如果它找不到这两个事务,LINQ to SQL 将启动本地事务(IDbTransaction
),并使用它来执行生成的 SQL 命令。 成功完成所有 SQL 命令后,LINQ to SQL 将提交本地事务并返回。