/// <summary> /// Gets all tenant names from tenant server /// </summary> /// <param name="tenantServerConfig">The tenant server configuration.</param> /// <param name="databaseConfig">The database configuration.</param> /// <returns></returns> private List <string> GetAllTenantNames(TenantServerConfig tenantServerConfig, DatabaseConfig databaseConfig) { List <string> list = new List <string>(); string conString = $"Server={databaseConfig.SqlProtocol}:{tenantServerConfig.TenantServer},{databaseConfig.DatabaseServerPort};" + $"Database={""};User ID={databaseConfig.DatabaseUser};Password={databaseConfig.DatabasePassword};" + $"Trusted_Connection=False;Encrypt=True;Connection Timeout={databaseConfig.ConnectionTimeOut};"; using (SqlConnection con = new SqlConnection(conString)) { con.Open(); using (SqlCommand cmd = new SqlCommand("SELECT name from sys.databases WHERE name NOT IN ('master')", con)) { using (IDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { list.Add(dr[0].ToString()); } } } } return(list); }
/// <summary> /// Register tenant shard /// </summary> /// <param name="tenantServerConfig">The tenant server configuration.</param> /// <param name="databaseConfig">The database configuration.</param> /// <param name="catalogConfig">The catalog configuration.</param> /// <param name="resetEventDate">If set to true, the events dates for all tenants will be reset </param> public async void RegisterTenantShard(TenantServerConfig tenantServerConfig, DatabaseConfig databaseConfig, CatalogConfig catalogConfig, bool resetEventDate) { //get all database in devtenantserver var tenants = GetAllTenantNames(tenantServerConfig, databaseConfig); var connectionString = new SqlConnectionStringBuilder { UserID = databaseConfig.DatabaseUser, Password = databaseConfig.DatabasePassword, ApplicationName = "EntityFramework", ConnectTimeout = databaseConfig.ConnectionTimeOut }; foreach (var tenant in tenants) { var tenantId = GetTenantKey(tenant); var result = await Sharding.RegisterNewShard(tenant, tenantId, tenantServerConfig.TenantServer, databaseConfig.DatabaseServerPort, catalogConfig.ServicePlan); if (result) { if (resetEventDate) { #region EF6 try { using (var context = new TenantContext(Sharding.ShardMap, tenantId, connectionString.ConnectionString)) { context.Database.ExecuteSqlCommand("sp_ResetBookingDates"); } var emailDetails = _configuration.GetSection("EmailNotification"); var fromEmailId = emailDetails["FromServiceEmailId"]; var ServiceName = emailDetails["ServiceName"]; _emailService.SendEmailToTenants(fromEmailId, ServiceName, "*****@*****.**", "Pramati"); } catch (ShardManagementException ex) { string errorText; if (ex.ErrorCode == ShardManagementErrorCode.MappingIsOffline) { errorText = "Tenant '" + tenant + "' is offline. Could not reset booking dates:" + ex.ToString(); } else { errorText = ex.ToString(); } Console.WriteLine(errorText); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } #endregion } } } }