Dashing.Engine.Dialects.DialectFactory.Create C# (CSharp) Method

Create() public method

public Create ( ConnectionStringSettings connectionString ) : ISqlDialect
connectionString System.Configuration.ConnectionStringSettings
return ISqlDialect
        public ISqlDialect Create(ConnectionStringSettings connectionString) {
            if (connectionString == null) {
                throw new ArgumentNullException("connectionString");
            }

            if (string.IsNullOrEmpty(connectionString.ProviderName)) {
                throw new ArgumentException(
                    "Please specify the provider name for that connection string (add providerName=\"System.Data.SqlClient\" to the connection string line in app/web.config)");
            }

            switch (connectionString.ProviderName) {
                case "System.Data.SqlClient":
                    var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString.ConnectionString);
                    if (connectionStringBuilder.TypeSystemVersion.StartsWith("SQL Server 200")) {
                        // this is the default for 2000, 2005, 2008
                        return new SqlServerDialect();
                    }

                    // 2012 has nice paging!
                    return new SqlServer2012Dialect();

                case "MySql.Data.MySqlClient":
                    return new MySqlDialect();

                case "System.Data.OleDb":
                    if (connectionString.ConnectionString.Contains("SQLNCLI11")) {
                        return new SqlServer2012Dialect();
                    }

                    if (connectionString.ConnectionString.Contains("SQLNCLI10") || connectionString.ConnectionString.Contains("SQLNCLI;")) {
                        return new SqlServerDialect();
                    }

                    if (connectionString.ConnectionString.Contains("MySQLProv")) {
                        return new MySqlDialect();
                    }

                    throw new NotImplementedException("For OleDb we only recognise Sql Server Native Client and MySQL provider");

                case "System.Data.SQLite":
                    return new SqliteDialect();

                default:
                    throw new NotImplementedException("Sorry, we don't support the \"" + connectionString.ProviderName + "\" provider just yet");
            }
        }
    }

Usage Example

Esempio n. 1
0
        private static string GenerateMigrationScript(
            ConnectionStringSettings connectionStringSettings,
            ReverseEngineerSettings reverseEngineerSettings,
            IConfiguration configuration,
            bool naive,
            out IEnumerable<string> warnings,
            out IEnumerable<string> errors) {
            // fetch the from state
            var dialectFactory = new DialectFactory();
            var dialect = dialectFactory.Create(connectionStringSettings.ToSystem());
            var factory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);

            // create database if not exists
            CreateDatabaseIfNotExists(connectionStringSettings, factory, dialect);

            DatabaseSchema schema;
            using (new TimedOperation("-- Reading database contents...")) {
                var databaseReader = new DatabaseReader(connectionStringSettings.ConnectionString, connectionStringSettings.ProviderName);
                schema = databaseReader.ReadAll();
            }

            IEnumerable<IMap> fromMaps;
            using (new TimedOperation("-- Reverse engineering...")) {
                Console.WriteLine();
                var engineer = new Engineer(reverseEngineerSettings.ExtraPluralizationWords);
                fromMaps = engineer.ReverseEngineer(schema, dialect, reverseEngineerSettings.GetTablesToIgnore(), consoleAnswerProvider, false);
                Console.Write("-- ");
            }

            using (var connection = factory.CreateConnection()) {
                connection.ConnectionString = connectionStringSettings.ConnectionString;
                // set up migrator
                IMigrator migrator;
                if (naive) {
                    throw new NotSupportedException("The Naive Migrator is no longer supported");
                }
                migrator = new Migrator(
                    dialect,
                    new CreateTableWriter(dialect),
                    new AlterTableWriter(dialect),
                    new DropTableWriter(dialect),
                    new StatisticsProvider(connection, dialect));

                // run the migrator
                string script;
                using (new TimedOperation("-- Generating diff...")) {
                    script = migrator.GenerateSqlDiff(
                        fromMaps,
                        configuration.Maps,
                        consoleAnswerProvider,
                        new ConsoleLogger(isVerbose),
                        reverseEngineerSettings.GetIndexesToIgnore(),
                        out warnings,
                        out errors);

                    // TODO: do things with warnings and errors
                    return script;
                }
            }
        }
DialectFactory