如何从 IDbContext 获取 IDbTransaction?

How do I get an IDbTransaction from an IDbContext?

一个IDbContext有一个DatabaseFacade,它有一个CurrentTransaction属性。但是 CurrentTransactionIDbContextTransaction。我想将 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();