EF-Core 5:IDbContextTransaction 没有 "GetDbContextTransaction()" 的定义。如何正确使用不同的上下文?

EF-Core 5: IDbContextTransaction has no definition for "GetDbContextTransaction()". How do I use a different context properly?

我的问题是,我想对 2 个 DbContext 对象进行操作(都使用模型优先方法 dotnet ef dbcontext scaffold 搭建了脚手架)。

我正在处理一个需要模块化的架构,所以我有一个抽象基础class,它可以插入特定的表,这些表总是相同的。甚至模型和上下文都位于一个全局项目中,因此每个项目都可以直接引用它。

我正在尝试的是开始一个事务,然后调用基 class 来插入基表,这些基表对于同一个事务总是相同的。之后我继续保存剩余的操作,这些操作因项目而异。

互联网上的任何地方,甚至是 Whosebug 和 msdn.com 我都找到了保存 context.Database.BeginTransaction() 返回的事务对象并将其传递给第二个上下文的方法 context.Database.UseTransaction(tran.GetDbTransaction())

参考文献:
https://docs.microsoft.com/en-us/ef/core/saving/transactions#share-connection-and-transaction

问题是,编译器告诉我,BeginTransaction() 返回的类型没有名为 GetDbTransaction()

的成员

只是将返回的对象传递给 UseTransaction() 不会编译,因为编译器无法转换 Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction(由 BeginTransaction() 返回到 System.Data.Common.DbTransaction(需要UseTransaction())

这个错误对我来说听起来很简单,但不知何故我在互联网上找不到任何关于为什么我的 IDbContextTransaction 没有这个方法的信息。

GetDbTransaction() 是命名空间 Microsoft.EntityFrameworkCore.Storage 中的扩展方法,因此您必须有一个 using 声明才能将扩展方法引入范围内。

using Microsoft.EntityFrameworkCore.Storage;