コード例 #1
0
        /// <summary>
        /// execute the migration process
        /// iterate the fieldsMaps, query the source and bulkCopy t des
        /// </summary>
        public void Run()
        {
            MigrateStatus = MigratorStatus.Running;

            var start = DateTime.Now;

            Logging.PushInfo("=======================================================================\n\nStart Migrating at : " + start.ToString(CultureInfo.InvariantCulture));

            _running = true;
            try
            {
                //raise migration process begin event
                if (MigrationProcessBegin != null)
                {
                    TableMigratedCount = 0;
                    MigrationProcessBegin(this, new MigrationEventArgs() { Message = "Migration process begin..." });
                }

                // Disable all triggers
                /*using (var conn = new SqlConnection(_destinationConnectionString))
                {
                    Logging.PushInfo("Start Disable all triggers");
                    conn.Open();
                    const string disableTriggerSql = "sp_MSforeachtable 'alter table ? disable trigger all'";
                    Logging.PushInfo("Command : " + disableTriggerSql);
                    var disableTriggerCmd = new SqlCommand(disableTriggerSql, conn);
                    disableTriggerCmd.CommandTimeout = Int32.MaxValue;
                    disableTriggerCmd.ExecuteNonQuery();

                    Logging.PushInfo("End Disable all triggers");
                }*/

                //open connections
                var sourceConn = new SqlConnection(_soureConnectionString);

                sourceConn.Open();

                Utils.CreateIndexTableAdapt(sourceConn);

                Utils.CreateSupportTempDb(sourceConn);


                var desConn = new SqlConnection(_destinationConnectionString);

                desConn.Open();

                Utils.CreateUniqueIndex(desConn);

                var usersAdapt = Utils.GetListUserAdapt(sourceConn);

                //var listEmailDuplicate = new List<string>();

                if (usersAdapt.Any())
                {
                    foreach (var userAdapt in usersAdapt)
                    {
                        var isValid = true;//Utils.CheckExistEmail(desConn, TenantID, userAdapt.Email);
                        if (isValid)
                        {
                            MembershipCreateStatus createStatus;
                            var user = Membership.CreateUser(userAdapt.Email,
                                ConfigurationManager.AppSettings["DefaultPasswordNewUser"], userAdapt.Email,
                                Constants.PasswordQuestion,
                                Constants.PasswordAnswer, true, null, out createStatus);
                            if (createStatus == MembershipCreateStatus.Success)
                            {
                                if (user != null)
                                {
                                    var query = string.Format(QueryConstants.QueryInsertUserTempdb,
                                        SourceDbSystemAdapt,
                                        "[dbo].[users]", DestinationServer, "st_Security", "[dbo].[sec_User]",
                                        userAdapt.Email, ParseData.GetGuid(user.ProviderUserKey), TenantID, DatabaseID);
                                    using (SqlCommand command = new SqlCommand(query, sourceConn))
                                    {
                                        //Logging.PushInfo(query);
                                        command.ExecuteNonQuery();
                                    }
                                }
                            }
                            else if (createStatus == MembershipCreateStatus.DuplicateEmail ||
                                     createStatus == MembershipCreateStatus.DuplicateUserName)
                            {
                                //listEmailDuplicate.Add("'" + userAdapt.Email + "'");
                            }
                        }
                    }
                }

                if (desConn.State == ConnectionState.Open)
                {
                    desConn.Close();
                    desConn.Dispose();
                }

                //insert query to queue table


                Logging.PushInfo("===============Start Insert Query To Queue Table===================");

                Logging.PushInfo("Enable identity insert on table [SysproMigration].[dbo].[QueueMigrate]");

                var migrationConn1 = MigrationConnectionString.CreateAndOpenConnection("Syspro Migration");

                var enableIdentityInsert = new SqlCommand("SET IDENTITY_INSERT [SysproMigration].[dbo].[QueueMigrate] ON", migrationConn1);
                enableIdentityInsert.ExecuteNonQuery();

                migrationConn1.CloseConnection();

                foreach (var fieldsMap in FieldsMaps)
                {
                    InsertQueryToQueue(fieldsMap, MigrationConnectionString);
                }

                Logging.PushInfo("===============End Insert Query To Queue Table===================");

                Logging.PushInfo("===============Start Read Query from Query Table===================");

                var migrationConn = MigrationConnectionString.CreateAndOpenConnection("Syspro Migration");

                var sourceConnObject = SourceConnectionString.GetObjectConnection();
                var desConnObject = DestinationConnectionString.GetObjectConnection();

                var objectQueue = new QueueMigrate
                {
                    SourceServerName = sourceConnObject.DataSource,
                    SourceDatabaseCompany = sourceConnObject.InitialCatalog,

                    TargetServerName = desConnObject.DataSource,
                    TargetDatabaseCompany = desConnObject.InitialCatalog
                };

                var lstQueue = Utils.GetQueueMigrates(migrationConn, objectQueue);

                migrationConn.CloseConnection();

                foreach (var queue in lstQueue)
                {
                    var fieldmap = FieldsMaps.FirstOrDefault(t => t.Id == queue.FieldsMapId);
                    MigrateFromQueue(queue, fieldmap);
                }

               /* //iterate the fieldsMaps and migrate every tables
                foreach (var fieldsMap in _fieldsMapsCompany)
                {
                    MigrateNew(fieldsMap, _destinationConnectionString, sourceConn,
                        listEmailDuplicate.Any() ? string.Join(",", listEmailDuplicate) : "");
                }*/



                //raise migration process end event
                if (MigrationProcessEnd != null)
                {
                    MigrationProcessEnd(this, new MigrationEventArgs() { Message = "Migration process done!!" });
                }

                desConn = DestinationConnectionString.CreateAndOpenConnection("Target");
                Utils.DropUniqueIndex(desConn);
                desConn.CloseConnection();

                sourceConn = SourceConnectionString.CreateAndOpenConnection("Source");
                Utils.DropIndexTableAdapt(sourceConn);
                sourceConn.CloseConnection();

                // Enable all triggers
                using (var conn = new SqlConnection(_destinationConnectionString))
                {
                    Logging.PushInfo("Start Enable all triggers");
                    conn.Open();
                    const string enableTriggerSql = "sp_MSforeachtable 'alter table ? enable trigger all'";
                    Logging.PushInfo("Command : " + enableTriggerSql);
                    var enableTriggerCmd = new SqlCommand(enableTriggerSql, conn);
                    enableTriggerCmd.ExecuteNonQuery();

                    Logging.PushInfo("End Enable all triggers");
                }

                //UpdateMigratedRestList(_migratedFilePath);
                Success = true;
                MigrateStatus = MigratorStatus.CompletedMigrate;
                var finish = DateTime.Now;
                Logging.PushInfo("=======================================================================\n\nFinish Migrating at : " + finish.ToString(CultureInfo.InvariantCulture));
                Logging.PushInfo("Process time : " + finish.Subtract(start));
            }
            catch (Exception e)
            {
                if (MigrationError != null)
                {
                    var evg = new MigrationEventArgs { Message = string.Format("{0}\n{1}", e.Message, e.StackTrace) };
                    MigrationError(this, evg);
                    Error = true;
                    Running = false;
                    Logging.PutError("MigrateError : ", e);
                }
                //log.Error("Run : ", e);
            }
            finally
            {
                _running = false;
            }
        }