public DbContextScopeFactory(IAmbientDbContextFactory ambientDbContextFactory, ILoggerFactory loggerFactory, IScopeDiagnostic scopeDiagnostic = null)
 {
     _ambientDbContextFactory = ambientDbContextFactory;
     _loggerFactory           = loggerFactory;
     _scopeDiagnostic         = scopeDiagnostic;
     _logger = loggerFactory.CreateLogger <DbContextScopeFactory>();
 }
        public DbContextScope(DbContextScopeOption joiningOption, bool readOnly, IsolationLevel?isolationLevel, IAmbientDbContextFactory ambientDbContextFactory, ILoggerFactory loggerFactory, IScopeDiagnostic scopeDiagnostic)
        {
            if (isolationLevel.HasValue && joiningOption == DbContextScopeOption.JoinExisting)
            {
                throw new ArgumentException("Cannot join an ambient DbContextScope when an explicit database transaction "
                                            + "is required. When requiring explicit database transactions to be used (i.e. when the "
                                            + "'isolationLevel' parameter is set), you must not also ask to join the ambient context "
                                            + "(i.e. the 'joinAmbient' parameter must be set to false).");
            }

            _disposed        = false;
            _completed       = false;
            _readOnly        = readOnly;
            _scopeDiagnostic = scopeDiagnostic;
            _logger          = loggerFactory.CreateLogger <DbContextScope>();

            _parentScope = AmbientContextScopeMagic.GetAmbientScope();
            if (_parentScope != null && joiningOption == DbContextScopeOption.JoinExisting)
            {
                if (_parentScope._readOnly && !_readOnly)
                {
                    throw new InvalidOperationException("Cannot nest a read/write DbContextScope within a read-only DbContextScope.");
                }

                _nested     = true;
                _dbContexts = _parentScope._dbContexts;
            }
            else
            {
                _nested     = false;
                _dbContexts = new DbContextCollection(this, ambientDbContextFactory, loggerFactory, readOnly, isolationLevel);
            }

            AmbientContextScopeMagic.SetAmbientScope(this);
        }
Beispiel #3
0
 public DbContextScope(DbContextScopeOption joiningOption, IsolationLevel?isolationLevel, IAmbientDbContextFactory ambientDbContextFactory, ILoggerFactory loggerFactory, IScopeDiagnostic scopeDiagnostic)
     : base(joiningOption, false, isolationLevel, ambientDbContextFactory, loggerFactory, scopeDiagnostic)
 {
     _scopeDiagnostic = scopeDiagnostic;
 }
 public DbContextReadOnlyScope(DbContextScopeOption joiningOption, IsolationLevel?isolationLevel, IAmbientDbContextFactory ambientDbContextFactory, ILoggerFactory loggerFactory, IScopeDiagnostic scopeDiagnostic)
 {
     _internalScope = new DbContextScope(joiningOption, true, isolationLevel, ambientDbContextFactory, loggerFactory, scopeDiagnostic);
 }