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;
我的问题是,我想对 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;