EnterpriseLibrary Data Access Application Block redirect Section can't find default database

倾然丶 夕夏残阳落幕 提交于 2019-12-06 16:41:44

There are a few ways to have separate configuration files:

  • redirectedSection
  • built-in .NET configSource
  • FileConfigurationSource

redirectedSections Approach

I think the error in your configuration is that you haven't redirected the connectionStrings section.

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>
  <enterpriseLibrary.ConfigurationSource selectedSource="System Configuration Source">
    <sources>
      <add name="System Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add name="File-based Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        filePath="data.config" />
    </sources>
    <redirectSections>
      <add sourceName="File-based Configuration Source" name="dataConfiguration" />
      <add sourceName="File-based Configuration Source" name="connectionStrings" />
    </redirectSections>
  </enterpriseLibrary.ConfigurationSource>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

data.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>
  <dataConfiguration defaultDatabase="abc" />
  <connectionStrings>
    <add name="abc" connectionString="abc" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Bootstrap code:

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

configSource Approach

Use the built-in .NET configSource to redirect configSections to an external file.

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>
  <dataConfiguration configSource="data.config" />
  <connectionStrings configSource="connections.config" />
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

connections.config:

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
  <add connectionString="abc" name="abc" providerName="System.Data.SqlClient"/>
</connectionStrings>

data.config:

<?xml version="1.0" encoding="utf-8" ?>
<dataConfiguration defaultDatabase="abc" />

Bootstrap Code:

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

FileConfigurationSource Approach

Use a FileConfigurationSource at bootstrap to load the appropriate configuration files. Since we will load the FileConfigurationSource directly at startup the app.config does not need any Enterprise Library configuration:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

data.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>
  <dataConfiguration defaultDatabase="abc" />
  <connectionStrings>
    <add name="abc" connectionString="abc" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Bootstrap code:

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

If you wanted the ability to modify the config file to load (i.e. "data.config") then you could use an appSetting to specify the file to load.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!