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); }
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); }