使用事务

    默认情况下,如果数据库提供程序支持事务,单个 调用中的所有变更都会在一个事务中被提交。如果其中任何一个变更失败了,那么事务就会回滚,没有任何变更会被应用到数据库。这意味着 SaveChanges() 能够确保要么成功保存,要么在发生错误时不对数据库做任何修改。

    对于大部分应用程序来说,默认的事务行为已经够用了。只有在应用程序需求认为有必要时你才需要手动去控制事务。

    并不是所有的数据库提供程序都支持事务,一些提供程序会在你调用事务 API 时抛出异常或执行空操作(你可以顺带了解一下 空对象模式,)。

    可以在多个上下文实例间共享事务。该功能只在使用关系数据库提供程序时可用,因为它需要使用 DbTransactionDbConnection,这些都是特定于关系数据库的。

    为了实现共享事务,上下文之间必须共享 和 DbTransaction

    共享 DbConnection 要求能够在构造上下文实例时传入链接对象。

    提示

    是你在 DbContext.OnConfiguring 中用来配置上下文实例的 API,现在你将在外部使用它来创建 DbContextOptions

    另一种替代方案是仍然使用 DbContext.OnConfiguring,但是接受并保存一个 DbConnection,然后在 DbContext.OnConfiguring 中使用它。

    共享连接和事务

    现在可以创建共享同一个连接的多个上下文了。之后可以使用 API 来在一个事务中收集这些上下文。

    以下代码样例显示了如何在同一个事务中执行一个 ADO.NET SqlClient 操作和一个 Entity Framework Core 操作。