Exemplo n.º 1
0
        /// <summary>
        /// Get method that supports providing a connection string.
        /// </summary>
        public TDbContext Get <TDbContext>(IDbTenant tenant) where TDbContext : TenantedDbContext
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("DbContextCollection");
            }

            var requestedType       = typeof(TDbContext);
            var requestedContextKey = string.Format("{0}_{1}_{2}", requestedType, tenant?.ConnectionString ?? "na", tenant?.SchemaName ?? "na");

            if (!_initializedDbContexts.ContainsKey(requestedType.ToString()))
            {
                // First time we've been asked for this particular DbContext type.
                // Create one, cache it and start its database transaction if needed.
                var dbContext = _dbContextFactory != null
                                        ? _dbContextFactory.CreateDbContext <TDbContext>(tenant)
                                        : (TDbContext)Activator.CreateInstance(requestedType, tenant);

                _initializedDbContexts.Add(requestedContextKey, dbContext);

                if (_readOnly)
                {
                    dbContext.Configuration.AutoDetectChangesEnabled = false;
                }

                if (_isolationLevel.HasValue)
                {
                    var tran = dbContext.Database.BeginTransaction(_isolationLevel.Value);
                    _transactions.Add(dbContext, tran);
                }
            }

            return(_initializedDbContexts[requestedContextKey] as TDbContext);
        }
Exemplo n.º 2
0
 public TenantedDbContext(IDbTenant tenant)
     : base(tenant?.ConnectionString)
 {
 }
Exemplo n.º 3
0
        public TDbContext Get <TDbContext>(IDbTenant tenant) where TDbContext : TenantedDbContext
        {
            var ambientDbContextScope = DbContextScope.GetAmbientScope();

            return(ambientDbContextScope == null ? null : ambientDbContextScope.DbContexts.Get <TDbContext>(tenant));
        }