/// <summary> /// Создание БД для аккаунта клиента /// </summary> /// <param name="client">Клиент системы</param> private void CreateClientDatabase(Client client, DateTime currentDateTime) { // создание сессии для БД master ISessionFactory sessionFactory = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008.ConnectionString("Data Source=" + client.DBServerName + ";Initial Catalog=master;Integrated Security=True")) .BuildSessionFactory(); // создание пустой БД (находясь в контексте БД master) using (ISession session = sessionFactory.OpenSession()) { // создание клиентской БД session.CreateSQLQuery("CREATE DATABASE " + client.DBName).ExecuteUpdate(); var dbTemplateName = "bizpulse_template"; // восстановление шаблона БД на клиентскую БД var restoreScriptTemplate = string.Format("RESTORE DATABASE {0} FROM DISK = '{1}' WITH FILE = 1, " + "MOVE '{2}' TO '{3}.mdf', MOVE '{2}_log' TO '{3}_log.ldf', NOUNLOAD, REPLACE, STATS = 10", client.DBName, Path.Combine(AppSettings.ClientDBTemplatePath, dbTemplateName + ".bak"), dbTemplateName, Path.Combine(AppSettings.ClientDBPath, client.DBName)); session.CreateSQLQuery(restoreScriptTemplate).ExecuteUpdate(); } // переключаем контекст на новую БД sessionFactory = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008.ConnectionString("Data Source=" + client.DBServerName + ";Initial Catalog=" + client.DBName + ";Integrated Security=True")) .BuildSessionFactory(); // обновляем информацию в новой БД для конкретного клиента using (ISession session = sessionFactory.OpenSession()) { var admin = client.Users.First(); // обновление для сотрудника var updateEmployeeScriptTemplate = string.Format( "UPDATE Employee SET LastName = '{0}', FirstName = '{1}', Patronymic = '{2}', CreationDate = {3} WHERE Id = 1", admin.LastName, admin.FirstName, admin.Patronymic, DateTimeUtils.ConvertToSqlDate(currentDateTime)); // обновление для пользователя var updateUserScriptTemplate = string.Format( "UPDATE [User] SET DisplayName = '{0}', DisplayNameTemplate = '{1}', Login = '******', PasswordHash = '{3}', CreationDate = {4} WHERE Id = 1", admin.FirstName + " " + admin.LastName, "FL", admin.Login, admin.PasswordHash, DateTimeUtils.ConvertToSqlDate(currentDateTime)); // пока единственный набор var currentServiceSet = client.ServiceSets.First(); // обновление максимального кол-ва сущностей var updateEntityCountLimitScriptTemplate = string.Format( "UPDATE [Setting] SET ActiveUserCountLimit = '{0}', TeamCountLimit = '{1}', StorageCountLimit = '{2}', AccountOrganizationCountLimit = '{3}', GigabyteCountLimit = '{4}'", currentServiceSet.Configuration.TotalActiveUserCountLimit, currentServiceSet.Configuration.TotalTeamCountLimit, currentServiceSet.Configuration.TotalStorageCountLimit, currentServiceSet.Configuration.TotalAccountOrganizationCountLimit, currentServiceSet.Configuration.TotalGigabyteCountLimit); session.CreateSQLQuery(updateEmployeeScriptTemplate + " " + updateUserScriptTemplate + " " + updateEntityCountLimitScriptTemplate).ExecuteUpdate(); } }