Example #1
0
        /// <summary>
        /// Loads the providers.
        /// </summary>
        public static void LoadProviders()
        {
            // Avoid claiming lock if providers are already loaded
            if (defaultProvider == null)
            {
                lock (_lock)
                {
                    // Do this again to make sure DefaultProvider is still null
                    if (defaultProvider == null)
                    {
                        //we allow for passing in a configuration section
                        //check to see if one's been passed in
                        if (section == null)
                        {
                            section = ConfigSectionSettings ?? (SubSonicSection)ConfigurationManager.GetSection(ConfigurationSectionName.SUB_SONIC_SERVICE);

                            //if it's still null, throw an exception
                            if (section == null)
                                throw new ConfigurationErrorsException("Can't find the SubSonicService section of the application config file");
                        }

                        // Load registered providers and point DefaultProvider
                        // to the default provider
                        _provider = new RestProviderCollection();
                        ProvidersHelper.InstantiateProviders(section.RESTHandlers, _provider, typeof(RestProvider));

                        defaultProvider = _provider[section.DefaultProvider];

                        if (defaultProvider == null && _provider.Count > 0)
                        {
                            IEnumerator enumer = _provider.GetEnumerator();
                            enumer.MoveNext();
                            defaultProvider = (RestProvider)enumer.Current;
                            if (defaultProvider == null)
                                throw new ProviderException("No providers could be located in the SubSonicService section of the application config file.");
                        }
                    }
                }
            }
        }
Example #2
0
        /// <summary>
        /// Sets the provider manually.
        /// </summary>
        private static void SetProviderManually()
        {
            string traceFlag = GetArg(ConfigurationPropertyName.ENABLE_TRACE);

            if(!String.IsNullOrEmpty(traceFlag))
                DataService.EnableTrace = Convert.ToBoolean(traceFlag);

            Utility.WriteTrace("Setting config manually - need AT LEAST a /server and /db");

            //clear the providers and reset
            DataService.Provider = new SqlDataProvider();
            DataService.Providers = new DataProviderCollection();

            //instance a section - we'll set this manually for the DataService
            SubSonicSection section = new SubSonicSection
                                          {
                                              TemplateDirectory = GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY)
                                          };
            CodeService.TemplateDirectory = section.TemplateDirectory;

            string providerName = GetArg(ConfigurationPropertyName.PROVIDER_TO_USE);
            if(string.IsNullOrEmpty(providerName))
                providerName = "Default";
            section.DefaultProvider = providerName;

            section.DefaultProvider = "Default";

            CodeService.TemplateDirectory = section.TemplateDirectory;

            //set the properties
            DataProvider provider = DataService.Provider;
            NameValueCollection config = new NameValueCollection
                                             {
                                                 {"connectionStringName", "Default"}
                                             };

            //need to add this for now

            if(!string.IsNullOrEmpty(GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY)))
                config.Add(ConfigurationPropertyName.TEMPLATE_DIRECTORY, GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY));

            //setup the config
            SetConfig(config, ConfigurationPropertyName.APPEND_WITH);
            SetConfig(config, ConfigurationPropertyName.ADDITIONAL_NAMESPACES);
            SetConfig(config, ConfigurationPropertyName.EXCLUDE_PROCEDURE_LIST);
            SetConfig(config, ConfigurationPropertyName.EXCLUDE_TABLE_LIST);
            SetConfig(config, ConfigurationPropertyName.EXTRACT_CLASS_NAME_FROM_SP_NAME);
            SetConfig(config, ConfigurationPropertyName.FIX_DATABASE_OBJECT_CASING);
            SetConfig(config, ConfigurationPropertyName.FIX_PLURAL_CLASS_NAMES);
            SetConfig(config, ConfigurationPropertyName.GENERATED_NAMESPACE);
            SetConfig(config, ConfigurationPropertyName.GENERATE_LAZY_LOADS);
            SetConfig(config, ConfigurationPropertyName.GENERATE_NULLABLE_PROPERTIES);
            SetConfig(config, ConfigurationPropertyName.GENERATE_ODS_CONTROLLERS);
            SetConfig(config, ConfigurationPropertyName.GENERATE_RELATED_TABLES_AS_PROPERTIES);
            SetConfig(config, ConfigurationPropertyName.INCLUDE_PROCEDURE_LIST);
            SetConfig(config, ConfigurationPropertyName.INCLUDE_TABLE_LIST);
            SetConfig(config, ConfigurationPropertyName.REGEX_DICTIONARY_REPLACE);
            SetConfig(config, ConfigurationPropertyName.REGEX_IGNORE_CASE);
            SetConfig(config, ConfigurationPropertyName.REGEX_MATCH_EXPRESSION);
            SetConfig(config, ConfigurationPropertyName.REGEX_REPLACE_EXPRESSION);
            SetConfig(config, ConfigurationPropertyName.RELATED_TABLE_LOAD_PREFIX);
            SetConfig(config, ConfigurationPropertyName.REMOVE_UNDERSCORES);
            SetConfig(config, ConfigurationPropertyName.SET_PROPERTY_DEFAULTS_FROM_DATABASE);
            SetConfig(config, ConfigurationPropertyName.SP_STARTS_WITH);
            SetConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_CLASS_NAME);
            SetConfig(config, ConfigurationPropertyName.STRIP_COLUMN_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_PARAM_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_STORED_PROCEDURE_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_TABLE_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_VIEW_TEXT);
            SetConfig(config, ConfigurationPropertyName.USE_EXTENDED_PROPERTIES);
            SetConfig(config, ConfigurationPropertyName.USE_STORED_PROCEDURES);
            SetConfig(config, ConfigurationPropertyName.USE_UTC_TIMES);
            SetConfig(config, ConfigurationPropertyName.VIEW_STARTS_WITH);
            SetConfig(config, ConfigurationPropertyName.GROUP_OUTPUT);

            //initialize the provider
            Utility.WriteTrace("Initializing the provider with the passed in configuration >>> hold on to your hats...");
            provider.Initialize(providerName, config);

            //first, make sure there's a connection
            Utility.WriteTrace("Overriding the connection string...");
            provider.DefaultConnectionString = GetConnnectionString();
            Utility.WriteTrace("Set connection string to " + provider.DefaultConnectionString);

            DataService.Providers.Add(provider);
        }
Example #3
0
        private static void SetProviderManually()
        {
            string traceFlag = GetArg(ConfigurationPropertyName.ENABLE_TRACE);

            if (!String.IsNullOrEmpty(traceFlag))
            {
                DataService.EnableTrace = Convert.ToBoolean(traceFlag);
            }

            Utility.WriteTrace("Setting config manually - need AT LEAST a /server and /db");

            //clear the providers and reset
            DataService.Provider  = new SqlDataProvider();
            DataService.Providers = new DataProviderCollection();

            //instance a section - we'll set this manually for the DataService
            SubSonicSection section = new SubSonicSection();

            section.TemplateDirectory     = GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY);
            CodeService.TemplateDirectory = section.TemplateDirectory;

            string providerName = GetArg(ConfigurationPropertyName.PROVIDER_TO_USE);

            if (string.IsNullOrEmpty(providerName))
            {
                providerName = "Default";
            }
            section.DefaultProvider = providerName;

            section.DefaultProvider = "Default";

            CodeService.TemplateDirectory = section.TemplateDirectory;

            //set the properties
            DataProvider provider = DataService.Provider;

            System.Collections.Specialized.NameValueCollection config = new System.Collections.Specialized.NameValueCollection();

            //need to add this for now
            config.Add("connectionStringName", "Default");

            if (!string.IsNullOrEmpty(GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY)))
            {
                config.Add(ConfigurationPropertyName.TEMPLATE_DIRECTORY, GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY));
            }
            if (string.IsNullOrEmpty(_namespace))
            {
                config.Add("generatedNamespace", _namespace);
            }

            //setup the config
            SetConfig(config, ConfigurationPropertyName.APPEND_WITH);
            SetConfig(config, ConfigurationPropertyName.ADDITIONAL_NAMESPACES);
            SetConfig(config, ConfigurationPropertyName.EXCLUDE_PROCEDURE_LIST);
            SetConfig(config, ConfigurationPropertyName.EXCLUDE_TABLE_LIST);
            SetConfig(config, ConfigurationPropertyName.EXTRACT_CLASS_NAME_FROM_SP_NAME);
            SetConfig(config, ConfigurationPropertyName.FIX_DATABASE_OBJECT_CASING, _fixCasing.ToString());
            SetConfig(config, ConfigurationPropertyName.FIX_PLURAL_CLASS_NAMES, _fixPlural.ToString());
            SetConfig(config, ConfigurationPropertyName.GENERATED_NAMESPACE);
            SetConfig(config, ConfigurationPropertyName.GENERATE_LAZY_LOADS, _lazyLoad.ToString());
            SetConfig(config, ConfigurationPropertyName.GENERATE_NULLABLE_PROPERTIES);
            SetConfig(config, ConfigurationPropertyName.GENERATE_ODS_CONTROLLERS);
            SetConfig(config, ConfigurationPropertyName.GENERATE_RELATED_TABLES_AS_PROPERTIES, _genRelationProperties.ToString());
            SetConfig(config, ConfigurationPropertyName.INCLUDE_PROCEDURE_LIST);
            SetConfig(config, ConfigurationPropertyName.INCLUDE_TABLE_LIST);
            SetConfig(config, ConfigurationPropertyName.REGEX_DICTIONARY_REPLACE, regexDictReplace);
            SetConfig(config, ConfigurationPropertyName.RELATED_TABLE_LOAD_PREFIX);
            SetConfig(config, ConfigurationPropertyName.REMOVE_UNDERSCORES, _removeUnderScore.ToString());
            SetConfig(config, ConfigurationPropertyName.SET_PROPERTY_DEFAULTS_FROM_DATABASE);
            SetConfig(config, ConfigurationPropertyName.SP_STARTS_WITH);
            SetConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_CLASS_NAME);
            SetConfig(config, ConfigurationPropertyName.STRIP_COLUMN_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_PARAM_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_STORED_PROCEDURE_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_TABLE_TEXT);
            SetConfig(config, ConfigurationPropertyName.STRIP_VIEW_TEXT);
            SetConfig(config, ConfigurationPropertyName.USE_EXTENDED_PROPERTIES);
            SetConfig(config, ConfigurationPropertyName.USE_STORED_PROCEDURES, _generateSP.ToString());
            SetConfig(config, ConfigurationPropertyName.VIEW_STARTS_WITH);
            SetConfig(config, ConfigurationPropertyName.REGEX_MATCH_EXPRESSION, regexMatch);
            SetConfig(config, ConfigurationPropertyName.REGEX_REPLACE_EXPRESSION, regexReplace);
            SetConfig(config, ConfigurationPropertyName.REGEX_IGNORE_CASE, regexIgnoreCase.ToString());
            //initialize the provider
            Utility.WriteTrace("Initializing the provider with the passed in configuration >>> hold on to your hats...");
            provider.Initialize(providerName, config);

            //first, make sure there's a connection
            Utility.WriteTrace("Overriding the connection string...");
            provider.DefaultConnectionString = GetConnnectionString();
            provider.GeneratedNamespace      = string.IsNullOrEmpty(_namespace) ? "SubSonic.Generated" : _namespace;
            AddLogEntry(LogState.Information, "Set connection string to " + provider.DefaultConnectionString);

            DataService.Providers.Add(provider);
        }
Example #4
0
        private static void InstantiateProvider(DataRow configSource)
        {
            bool isProjectSource = configSource is MasterStore.ProjectsRow;
            //bool isProviderSource = configSource is DM.ProvidersRow;

            MasterStore.ProjectsRow activeProject;
            MasterStore.ProvidersRow[] activeProviders;
            if(isProjectSource)
            {
                activeProject = (MasterStore.ProjectsRow)configSource;
                activeProviders = activeProject.Providers();
            }
            else
            {
                activeProject = ((MasterStore.ProvidersRow)configSource).Project;
                activeProviders = new MasterStore.ProvidersRow[] {(MasterStore.ProvidersRow)configSource};
            }

            SubSonicSection section = new SubSonicSection();

            if(activeProject.DefaultProviderEntry != null)
                section.DefaultProvider = activeProject.DefaultProviderEntry.Name;
            else if(activeProject.Providers().Length > 0)
            {
                activeProject.DefaultProvider = activeProject.Providers()[0].ProviderId;
                MM.Save();
            }
            else
            {
                activeProject.SetDefaultProviderNull();
                MM.Save();
                return;
            }

            section.TemplateDirectory = activeProject.TemplateDirectory;

            CodeService.TemplateDirectory = section.TemplateDirectory;

            InitializeProviderCollection();
            foreach(MasterStore.ProvidersRow providerEntry in activeProviders)
            {
                NameValueCollection config = new NameValueCollection();

                AddToProviderConfig(config, ConfigurationPropertyName.CONNECTION_STRING_NAME, providerEntry.ConnectionString, MM.ConnectionStrings.NameColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.APPEND_WITH, providerEntry, MM.Providers.AppendWithColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.ADDITIONAL_NAMESPACES, providerEntry, MM.Providers.AdditionalNamespacesColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.EXCLUDE_PROCEDURE_LIST, providerEntry, MM.Providers.ExcludeProcedureListColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.EXCLUDE_TABLE_LIST, providerEntry, MM.Providers.ExcludeTableListColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.EXTRACT_CLASS_NAME_FROM_SP_NAME, providerEntry, MM.Providers.ExtractClassNameFromSPNameColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.FIX_DATABASE_OBJECT_CASING, providerEntry, MM.Providers.FixDatabaseObjectCasingColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.FIX_PLURAL_CLASS_NAMES, providerEntry, MM.Providers.FixPluralClassNamesColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.GENERATED_NAMESPACE, providerEntry, MM.Providers.GeneratedNamespaceColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_LAZY_LOADS, providerEntry, MM.Providers.GenerateLazyLoadsColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_NULLABLE_PROPERTIES, providerEntry, MM.Providers.GenerateNullablePropertiesColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_ODS_CONTROLLERS, providerEntry, MM.Providers.GenerateODSControllersColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.GENERATE_RELATED_TABLES_AS_PROPERTIES, providerEntry, MM.Providers.GenerateRelatedTablesAsPropertiesColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.INCLUDE_PROCEDURE_LIST, providerEntry, MM.Providers.IncludeProcedureListColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.INCLUDE_TABLE_LIST, providerEntry, MM.Providers.IncludeTableListColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.REGEX_DICTIONARY_REPLACE, providerEntry, MM.Providers.RegexDictionaryReplaceColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.REGEX_IGNORE_CASE, providerEntry, MM.Providers.RegexIgnoreCaseColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.REGEX_MATCH_EXPRESSION, providerEntry, MM.Providers.RegexMatchExpressionColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.REGEX_REPLACE_EXPRESSION, providerEntry, MM.Providers.RegexReplaceExpressionColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.RELATED_TABLE_LOAD_PREFIX, providerEntry, MM.Providers.RelatedTableLoadPrefixColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.REMOVE_UNDERSCORES, providerEntry, MM.Providers.RemoveUnderscoresColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.SET_PROPERTY_DEFAULTS_FROM_DATABASE, providerEntry, MM.Providers.SetPropertyDefaultsFromDatabaseColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.SP_STARTS_WITH, providerEntry, MM.Providers.SPStartsWithColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_BASE_CLASS, providerEntry, MM.Providers.StoredProcedureBaseClassColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.STORED_PROCEDURE_CLASS_NAME, providerEntry, MM.Providers.SPClassNameColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.STRIP_COLUMN_TEXT, providerEntry, MM.Providers.StripColumnTextColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.STRIP_PARAM_TEXT, providerEntry, MM.Providers.StripParamTextColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.STRIP_STORED_PROCEDURE_TEXT, providerEntry, MM.Providers.StripSPTextColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.STRIP_TABLE_TEXT, providerEntry, MM.Providers.StripTableTextColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.STRIP_VIEW_TEXT, providerEntry, MM.Providers.StripViewTextColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.TABLE_BASE_CLASS, providerEntry, MM.Providers.TableBaseClassColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.USE_EXTENDED_PROPERTIES, providerEntry, MM.Providers.UseExtendedPropertiesColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.USE_STORED_PROCEDURES, providerEntry, MM.Providers.UseSPsColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.USE_UTC_TIMES, providerEntry, MM.Providers.UseUTCColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.VIEW_BASE_CLASS, providerEntry, MM.Providers.ViewBaseClassColumn);
                AddToProviderConfig(config, ConfigurationPropertyName.VIEW_STARTS_WITH, providerEntry, MM.Providers.ViewStartsWithColumn);

                if(!providerEntry.IsConnectionStringIdNull())
                {
                    string connString = providerEntry.ConnectionString.ConnectionString;
                    string location = providerEntry.Project.OriginalLocation;
                    location = location.EndsWith(@"\") ? location : location + @"\";
                    location += @"App_Data\";

                    bool loadProvider = true;
                    string modConn = Regex.Replace(connString, @"\|DataDirectory\|", location, RegexOptions.IgnoreCase);
                    if(!Utility.IsMatch(modConn, connString))
                    {
                        Match dbFileName = Regex.Match(connString, @"(?<=\|DataDirectory\|).*\.mdf", RegexOptions.IgnoreCase);
                        if(dbFileName != null)
                        {
                            string fileLocation = location + dbFileName.Value;
                            if(!File.Exists(fileLocation))
                                loadProvider = false;
                        }
                    }

                    if(loadProvider)
                    {
                        Assembly asm = Assembly.Load("SubSonic");
                        Type type = asm.GetType("SubSonic." + providerEntry.ProviderType.InternalName);
                        if(type != null)
                        {
                            DataProvider provider = (DataProvider)Activator.CreateInstance(type, false);
                            provider.Initialize(providerEntry.Name, config);
                            provider.DefaultConnectionString = modConn;
                            DataService.Providers.Add(provider);
                        }
                    }
                }
            }
            Application.DoEvents();
        }
Example #5
0
        private static void SetProvider(string appConfigPath)
        {
            //clear the providers and reset
            DataService.Provider  = new SqlDataProvider();
            DataService.Providers = new DataProviderCollection();


            //if present, get the connection strings and the SubSonic config
            if (File.Exists(appConfigPath))
            {
                ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
                AddLogEntry(LogState.Information, "Building configuration from " + Path.Combine(Directory.GetCurrentDirectory(), appConfigPath));
                fileMap.ExeConfigFilename = appConfigPath;

                // Open another config file
                Configuration subConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

                try
                {
                    SubSonicSection section = (SubSonicSection)subConfig.GetSection(ConfigurationSectionName.SUB_SONIC_SERVICE);

                    if (section != null)
                    {
                        DataService.ConfigSection = section;
                        string argTemplateDirectory    = GetArg(ConfigurationPropertyName.TEMPLATE_DIRECTORY);
                        string activeTemplateDirectory = String.IsNullOrEmpty(argTemplateDirectory) ? section.TemplateDirectory : argTemplateDirectory;


                        string argTraceFlag    = GetArg(ConfigurationPropertyName.ENABLE_TRACE);
                        string activeTraceFlag = String.IsNullOrEmpty(argTraceFlag) ? section.EnableTrace : argTraceFlag;

                        if (!String.IsNullOrEmpty(activeTraceFlag))
                        {
                            DataService.EnableTrace = Convert.ToBoolean(activeTraceFlag);
                        }

                        if (!String.IsNullOrEmpty(activeTemplateDirectory))
                        {
                            AddLogEntry(LogState.Information, "Overriding default templates with those from " + section.TemplateDirectory);
                            CodeService.TemplateDirectory = activeTemplateDirectory;
                        }

                        //initialize
                        //need to pull out the default connection string
                        //since this application doesn't have a config file, the target one does
                        //so reconciling connection string won't work
                        string connectionStringName = section.Providers[0].Parameters["connectionStringName"];
                        if (connectionStringName == null)
                        {
                            throw new ConfigurationErrorsException("The Parameter 'connectionStringName' was not specified");
                        }

                        ConnectionStringSettings connSettings = subConfig.ConnectionStrings.ConnectionStrings[connectionStringName];
                        if (connSettings == null)
                        {
                            throw new ConfigurationErrorsException(string.Format("ConnectionStrings section missing connection string with the name '{0}'", connectionStringName));
                        }

                        string connString = subConfig.ConnectionStrings.ConnectionStrings[connectionStringName].ConnectionString;
                        //DataService.ConnectionString = connString;


                        System.Web.Configuration.ProvidersHelper.InstantiateProviders(section.Providers, DataService.Providers, typeof(DataProvider));

                        //this is a tad backwards, but it's what needs to happen since our application
                        //is configuring another application's providers
                        //go back and reset the provider's connection strings

                        //int counter = 0;
                        foreach (DataProvider provider in DataService.Providers)
                        {
                            AddLogEntry(LogState.Information, "Adding connection to " + provider.Name);

                            provider.SetDefaultConnectionString(subConfig.ConnectionStrings.ConnectionStrings[provider.ConnectionStringName].ConnectionString);
                            //provider.ConnectionString = subConfig.ConnectionStrings.ConnectionStrings[provider.ConnectionStringName].ConnectionString;
                        }

                        //reset the default provider
                        string providerName = GetArg("provider");
                        if (providerName != string.Empty)
                        {
                            try
                            {
                                DataService.Provider = DataService.Providers[providerName];
                            }
                            catch (Exception e)
                            {
                                AddLogEntry(LogState.Error, string.Format("ERROR: There is no provider with the name '{0}'. Exception: {1}", providerName, e));
                            }
                        }
                        else
                        {
                            DataService.Provider = DataService.Providers[section.DefaultProvider];
                        }
                    }
                }
                catch (ConfigurationErrorsException x)
                {
                    //let the user know the config was problematic...
                    Console.WriteLine("Can't set the configuration for the providers. There is an error with your config setup (did you remember to configure SubSonic in your config file?). '{0}'", x.Message);
                }
            }
            else
            {
                throw new Exception("There's no config file present at " + appConfigPath);
            }
        }