Beispiel #1
0
        /// <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();
            }
        }