示例#1
0
        /// <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));
        }