EnterpriseLibrary数据访问应用程序块重定向部分找不到默认数据库

如何使用EnterpriseLibrary数据访问应用程序块的数据重定向部分?

我想从app.config中删除数据库的定义并放在一个独立的database.config文件中。

我尝试使用与logging.config和exception.config文件相同的方式,但我不能让它工作。

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using Microsoft.Practices.EnterpriseLibrary.Data; using Microsoft.Practices.EnterpriseLibrary.Data.Sql; using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling; using Microsoft.Practices.EnterpriseLibrary.Logging; using System; using System.Data; namespace entlib6 { class Program { static void Main(string[] args) { IConfigurationSource source = ConfigurationSourceFactory.Create(); LogWriterFactory logwriterFactory = new LogWriterFactory(source); var logWriter = logwriterFactory.Create(); Logger.SetLogWriter(logWriter); var exceptionPolicyFactory = new ExceptionPolicyFactory(source); var exceptionManager = exceptionPolicyFactory.CreateManager(); ExceptionPolicy.SetExceptionManager(exceptionManager); DatabaseProviderFactory factory = new DatabaseProviderFactory(source); DatabaseFactory.SetDatabaseProviderFactory(factory, false); // Test Logging Block logWriter.Write("This a test"); // Test Exception block try { throw new NotImplementedException(); } catch (Exception exception) { Exception newException; var rethrowNewException = ExceptionPolicy.HandleException(exception, "Policy", out newException); if (rethrowNewException) throw newException; } // Test Data Block fails with error code below // System.InvalidOperationException was unhandled // Message=The configuration file does not define a default database. var sqlServerDb = DatabaseFactory.CreateDatabase() as SqlDatabase; using (IDataReader reader = sqlServerDb.ExecuteReader(CommandType.Text, "SELECT TOP 1 * FROM Production.Product")) { while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { Console.WriteLine("{0} = {1}", reader.GetName(i), reader[i]); } Console.WriteLine(""); } } } } } 

我在下面公开了配置文件:

    

有几种方法可以使用单独的配置文件:

  • redirectedSection
  • 内置的.NET configSource
  • FileConfigurationSource

重定向部分方法

我认为您的配置中的错误是您没有重定向connectionStrings部分。

的app.config:

    

data.config:

    

引导代码:

 DatabaseProviderFactory factory = new DatabaseProviderFactory(new SystemConfigurationSource()); DatabaseFactory.SetDatabaseProviderFactory(factory, false); 

configSource方法

使用内置的.NET configSource将configSections重定向到外部文件。

的app.config:

    

connections.config:

     

data.config:

   

引导代码:

 DatabaseProviderFactory factory = new DatabaseProviderFactory(); DatabaseFactory.SetDatabaseProviderFactory(factory, false); 

FileConfigurationSource方法

在引导程序中使用FileConfigurationSource来加载相应的配置文件。 由于我们将在启动时直接加载FileConfigurationSource,因此app.config不需要任何企业库配置:

       

data.config:

    

引导代码:

 FileConfigurationSource configSource = new FileConfigurationSource("data.config"); DatabaseProviderFactory factory = new DatabaseProviderFactory(configSource); 

如果您希望能够修改配置文件以加载(即“data.config”),那么您可以使用appSetting指定要加载的文件。