Un IDbContext
ha un DatabaseFacade
, che ha una proprietà CurrentTransaction
. Ma CurrentTransaction
è un IDbContextTransaction
. Voglio passare un IDbTransaction
a Dapper.
Come ottengo un IDbTransaction
invece di un IDbContextTransaction
?
Attualmente (fino ad oggi EF Core 2.0) non esiste un modo ufficiale per farlo.
Ma puoi usare il seguente metodo di estensione personalizzato per ottenerlo da 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;
}
}
piace
var dbTransaction = context.Database.CurrentTransaction.GetDbTransaction();
Aggiornamento: attualmente EF Core fornisce il metodo di estensione con la firma sopra pronta all'uso. È fornito dalla classe DbContextTransactionExtensions
. Per usarlo, tutto ciò che serve è un riferimento all'assembly Microsoft.EntityFrameworkCore.Relational.dll
e
using Microsoft.EntityFrameworkCore.Storage;