Ejemplo n.º 1
0
        /// <inheritdoc />
        public TContext Create()
        {
            var value = _tenantProvider.Get().ToString();

            if (string.IsNullOrEmpty(value))
            {
                throw new TenantNotProvidedException();
            }
            var tenant = _tenantManager.Get(_tenantProvider.Get());

            if (tenant is null)
            {
                throw new TenantNotFoundException(_tenantProvider.Get().ToString());
            }

            var password = _tenantManager.GetTenantPassword(tenant.Password, tenant.ConcurrencyStamp);
            var connectionStringBuilder = new SqlConnectionStringBuilder
            {
                DataSource     = $"tcp:{tenant.Server},{tenant.Port}",
                InitialCatalog = tenant.Database,
                UserID         = tenant.UserName,
                Password       = password,
            };

            _context = Activator.CreateInstance(typeof(TContext), connectionStringBuilder, _tenantProvider, _onConfiguringDbContextOptionsBuilderProvider) as TContext;
            return(_context);
        }
Ejemplo n.º 2
0
        public Task <ITenant> GetTenantAsync()
        {
            var request = _httpContextAccessor.HttpContext.Request;

            if (!request.Headers.ContainsKey(_tenantIdHeaderKey))
            {
                throw new InvalidOperationException("Missing tenant id");
            }

            var tenantHeaderValue = request.Headers[_tenantIdHeaderKey].FirstOrDefault();

            if (!int.TryParse(tenantHeaderValue, out int tenantId))
            {
                throw new InvalidOperationException($"Invalid tenant id: {tenantHeaderValue}");
            }

            return(Task.FromResult(_tenantProvider.Get(tenantId)));
        }