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指定要加载的文件。