public IMigrationProcessor CreateMigrationProcessor(RunnerContext context, IDbConnection connection)
        {
            try
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();

                IMigrationGenerator migrationGenerator;
                using (var command = new SqlCommand("SELECT CAST(LEFT(CAST(SERVERPROPERTY('productversion') AS varchar(50)),CHARINDEX('.',CAST(SERVERPROPERTY('productversion') AS varchar(50)))-1)AS int)", connection as SqlConnection))
                {
                    var version = (int)command.ExecuteScalar();
                    switch (version)
                    {
                        case 9:
                            migrationGenerator = new SqlServer2005Generator();
                            break;

                        case 10:
                            migrationGenerator = new SqlServer2008Generator();
                            break;

                        default:
                            migrationGenerator = new SqlServer2012Generator();
                            //                            throw new Exception(string.Format("无法识别的数据库版本:{0}。", version));
                            break;
                    }
                }

                return new SqlServerProcessor(
                                        connection
                                        , migrationGenerator
                                        , context.Announcer,
                                        new ProcessorOptions
                                        {
                                            PreviewOnly = context.PreviewOnly,
                                            ProviderSwitches = context.ProviderSwitches,
                                            Timeout = context.Timeout
                                        }
                                        , new SqlServerDbFactory());
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                    connection.Close();
            }
        }
 public void Setup()
 {
     generator = new SqlServer2005Generator();
 }
        private static void ExecuteWithSqlServer(IntegrationTestOptions.DatabaseServerOptions serverOptions, TextWriterAnnouncer announcer, SqlServer2005Generator generator, Action<IMigrationProcessor> test, bool tryRollback)
        {
            using (var connection = new SqlConnection(serverOptions.ConnectionString))
            {
                var processor = new SqlServerProcessor(connection, generator, announcer, new ProcessorOptions(), new SqlServerDbFactory());
                test(processor);

                if (tryRollback && !processor.WasCommitted)
                {
                    processor.RollbackTransaction();
                }
            }
        }
        protected static void ExecuteWithSqlServer2005(Action<IMigrationProcessor> test, bool tryRollback)
        {
            var serverOptions = IntegrationTestOptions.SqlServer2005;

            if (!serverOptions.IsEnabled)
                return;

            var announcer = new TextWriterAnnouncer(System.Console.Out);
            announcer.Heading("Testing Migration against MS SQL Server 2005");
            var generator = new SqlServer2005Generator();

            ExecuteWithSqlServer(serverOptions, announcer, generator, test, tryRollback);
        }