如何从 IDbContext 获取 IDbTransaction?
How do I get an IDbTransaction from an IDbContext?
一个IDbContext
有一个DatabaseFacade
,它有一个CurrentTransaction
属性。但是 CurrentTransaction
是 IDbContextTransaction
。我想将 IDbTransaction
传递给 Dapper。
如何获得 IDbTransaction
而不是 IDbContextTransaction
?
更新: 实际上 EF Core 提供了开箱即用的带有上述签名的扩展方法。它由 DbContextTransactionExtensions
class 提供。要使用它,您只需要引用 Microsoft.EntityFrameworkCore.Relational.dll
程序集和
using Microsoft.EntityFrameworkCore.Storage;
已过时:
目前(目前最新的 EF Core 2.0)没有官方方法可以做到这一点。
但您可以使用以下自定义扩展方法从 IDbContextTransaction
中获取它:
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
using System.Data.Common;
public static class EFExtensions
{
public static DbTransaction GetDbTransaction(this IDbContextTransaction source)
{
return (source as IInfrastructure<DbTransaction>).Instance;
}
}
喜欢
var dbTransaction = context.Database.CurrentTransaction.GetDbTransaction();
一个IDbContext
有一个DatabaseFacade
,它有一个CurrentTransaction
属性。但是 CurrentTransaction
是 IDbContextTransaction
。我想将 IDbTransaction
传递给 Dapper。
如何获得 IDbTransaction
而不是 IDbContextTransaction
?
更新: 实际上 EF Core 提供了开箱即用的带有上述签名的扩展方法。它由 DbContextTransactionExtensions
class 提供。要使用它,您只需要引用 Microsoft.EntityFrameworkCore.Relational.dll
程序集和
using Microsoft.EntityFrameworkCore.Storage;
已过时: 目前(目前最新的 EF Core 2.0)没有官方方法可以做到这一点。
但您可以使用以下自定义扩展方法从 IDbContextTransaction
中获取它:
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
using System.Data.Common;
public static class EFExtensions
{
public static DbTransaction GetDbTransaction(this IDbContextTransaction source)
{
return (source as IInfrastructure<DbTransaction>).Instance;
}
}
喜欢
var dbTransaction = context.Database.CurrentTransaction.GetDbTransaction();