使用事务
默认情况下,如果数据库提供程序支持事务,单个 调用中的所有变更都会在一个事务中被提交。如果其中任何一个变更失败了,那么事务就会回滚,没有任何变更会被应用到数据库。这意味着 SaveChanges()
能够确保要么成功保存,要么在发生错误时不对数据库做任何修改。
对于大部分应用程序来说,默认的事务行为已经够用了。只有在应用程序需求认为有必要时你才需要手动去控制事务。
并不是所有的数据库提供程序都支持事务,一些提供程序会在你调用事务 API 时抛出异常或执行空操作(你可以顺带了解一下 空对象模式,)。
可以在多个上下文实例间共享事务。该功能只在使用关系数据库提供程序时可用,因为它需要使用 DbTransaction
和 DbConnection
,这些都是特定于关系数据库的。
为了实现共享事务,上下文之间必须共享 和 DbTransaction
。
共享 DbConnection
要求能够在构造上下文实例时传入链接对象。
提示
是你在
DbContext.OnConfiguring
中用来配置上下文实例的 API,现在你将在外部使用它来创建DbContextOptions
。
另一种替代方案是仍然使用 DbContext.OnConfiguring
,但是接受并保存一个 DbConnection
,然后在 DbContext.OnConfiguring
中使用它。
共享连接和事务
现在可以创建共享同一个连接的多个上下文了。之后可以使用 API 来在一个事务中收集这些上下文。
以下代码样例显示了如何在同一个事务中执行一个 ADO.NET SqlClient 操作和一个 Entity Framework Core 操作。