/// <summary> /// Initializes a new instance of the <see cref="DbContextRepository{TId,TEntity,TDbContext,TDbEntity}"/> class. /// </summary> /// <param name="provider">The data provider.</param> /// <param name="tokenGenerator">The token generator used for generating change tokens.</param> /// <param name="entityMapper">The entity mapper.</param> /// <param name="logger">The logger.</param> public DbContextRepository( IDbContextDataProvider <TDbContext> provider, ITokenGenerator tokenGenerator, IEntityMapper entityMapper, ILogger logger) { Ensure.Arg.NotNull(provider, nameof(provider)); Ensure.Arg.NotNull(tokenGenerator, nameof(tokenGenerator)); Ensure.Arg.NotNull(entityMapper, nameof(entityMapper)); Ensure.Arg.NotNull(logger, nameof(logger)); TDbContext context = provider.GetContext(); _tokenGenerator = tokenGenerator; _mapper = entityMapper; _logger = logger; _modelProperties = DbModelProperties.Get( typeof(TDbContext), typeof(TDbEntity), context.Model, typeof(TEntity)); Provider = provider; Context = context; Set = context.Set <TDbEntity>(); }
/// <inheritdoc /> public async Task <ITransaction> BeginTransactionAsync( IsolationLevel isolationLevel, CancellationToken cancellationToken = default) { DbContext dbContext = _provider.GetContext(); IDbContextTransaction transaction = await dbContext.Database.BeginTransactionAsync(cancellationToken); return(_currentTransaction = new DbContextTransaction(dbContext, transaction, _logger)); }