/// <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); }
public TenantedDbContext(IDbTenant tenant) : base(tenant?.ConnectionString) { }
public TDbContext Get <TDbContext>(IDbTenant tenant) where TDbContext : TenantedDbContext { var ambientDbContextScope = DbContextScope.GetAmbientScope(); return(ambientDbContextScope == null ? null : ambientDbContextScope.DbContexts.Get <TDbContext>(tenant)); }