Корпоративная библиотека: перенаправление раздела connectionStrings не добавляет новые ConnectionStrings в ConfigurationManager.ConnectionStrings

Я пытаюсь переместить строки подключения во внешний файл с помощью EntLib, но

ConfigurationManager.ConnectionStrings дает мне только базу данных ASP.NET по умолчанию, которой нет даже в конфигурации.

data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

Я ожидал увидеть там две строки подключения из shared.config. В чем может быть проблема, или я неправильно понимаю эту функцию?

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,  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, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add name="Shared" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                filePath="shared.config" />
        </sources>
        <redirectSections>
            <add sourceName="Shared" name="connectionStrings" />
        </redirectSections>
    </enterpriseLibrary.ConfigurationSource>
</configuration>

общий.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <connectionStrings> 
        <add name="connStr1" connectionString="Data Source=local;Initial Catalog=DB1;Integrated Security=True"
          providerName="System.Data.SqlClient" />
    <add name="connStr2" connectionString="Data Source=local;Initial Catalog=DB2;Integrated Security=True"
          providerName="System.Data.SqlClient" />
    </connectionStrings>

</configuration>

person Andrey Ershov    schedule 05.04.2016    source источник


Ответы (1)


На самом деле ConfigurationManager.ConnectionStrings ничего не знает об инфраструктуре Enterprise Library. По умолчанию разделы не могут быть перенаправлены с помощью ConfigurationSource Enterprise Library.

Вы должны использовать атрибут configSource, который является функцией .NET Framework, а не Enterprise Library.

приложение.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings configSource="sharedConnectionStrings.config" />
</configuration>

общиеConnectionStrings.config:

<?xml version="1.0" encoding="utf-8" ?>
<connectionsStrings>
    <add name="connStr1"
         connectionString="Data Source=local;Initial Catalog=DB1;Integrated Security=True"
         providerName="System.Data.SqlClient" />
    <add name="connStr2"
         connectionString="Data Source=local;Initial Catalog=DB2;Integrated Security=True"
         providerName="System.Data.SqlClient" />
</connectionsStrings>

Обновление: если вы хотите использовать функции Enterprise Library, не используйте ConfigurationManager.ConnectionStrings напрямую. Вместо этого используйте функции Enterprise Library для создания подключений к базе данных, например:

 Database db = DatabaseFactory.CreateDatabase(“Tom’s Connection”);

Затем вы можете использовать источники конфигурации Enterprise Library.

Я нашел это ссылка с примером полезная.

person hal    schedule 05.04.2016
comment
Когда я увидел перенаправление строк подключения в их инструменте настройки, я подумал, что он поддерживает перенаправление разделов по умолчанию. Печально, я чуть не сдох :) Механизм перенаправления по умолчанию не позволяет использовать эти классные функции наследования и слияния конфигов. - person Andrey Ershov; 05.04.2016