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


how can working data redirected section enterpriselibrary data access application block?

i have definitions databases removed app.config , placed on standalone database.config file.

i try same way doing logging.config , and exception.config files can't work.

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 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 error code below             //  system.invalidoperationexception unhandled             //  message=the configuration file not define default database.             var sqlserverdb = databasefactory.createdatabase() sqldatabase;             using (idatareader reader = sqlserverdb.executereader(commandtype.text, "select top 1 * production.product"))             {                 while (reader.read())                 {                     (int = 0; < reader.fieldcount; i++)                     {                         console.writeline("{0} = {1}", reader.getname(i), reader[i]);                     }                     console.writeline("");                 }             }         }     } } 

i expose configurations files here below:

<?xml version="1.0" encoding="utf-8" ?> <configuration>   <configsections>     <section name="enterpriselibrary.configurationsource" type="microsoft.practices.enterpriselibrary.common.configuration.configurationsourcesection, microsoft.practices.enterpriselibrary.common" requirepermission="true" />   </configsections>   <enterpriselibrary.configurationsource selectedsource="systemconfiguration">     <sources>       <add name="systemconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.systemconfigurationsource, microsoft.practices.enterpriselibrary.common" />       <add name="exceptionconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="exception.config" />       <add name="loggingconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="logging.config" />       <add name="policyconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="policy.config" />       <add name="databaseconfiguration" type="microsoft.practices.enterpriselibrary.common.configuration.fileconfigurationsource, microsoft.practices.enterpriselibrary.common" filepath="database.config" />     </sources>     <redirectsections>       <add sourcename="exceptionconfiguration" name="exceptionhandling" />       <add sourcename="loggingconfiguration" name="loggingconfiguration" />       <add sourcename="policyconfiguration" name="policyconfiguration" />       <add sourcename="databaseconfiguration" name="databaseconfiguration" />     </redirectsections>   </enterpriselibrary.configurationsource>   <startup>     <supportedruntime version="v4.0" sku=".netframework,version=v4.5" />   </startup> </configuration>      <?xml version="1.0" encoding="utf-8" ?>     <configuration>       <configsections>         <section name="dataconfiguration" type="microsoft.practices.enterpriselibrary.data.configuration.databasesettings, microsoft.practices.enterpriselibrary.data" requirepermission="true" />       </configsections>       <dataconfiguration defaultdatabase="defaultconnection" />       <connectionstrings>         <add name="defaultconnection" connectionstring="data source=(localdb)\v11.0;initial catalog=adventureworks2008r2;integrated security=true" providername="system.data.sqlclient" />       </connectionstrings>     </configuration>       <?xml version="1.0" encoding="utf-8" ?>     <configuration>       <configsections>         <section name="loggingconfiguration" type="microsoft.practices.enterpriselibrary.logging.configuration.loggingsettings, microsoft.practices.enterpriselibrary.logging" requirepermission="true" />       </configsections>       <loggingconfiguration name="" tracingenabled="true" defaultcategory="general">         <listeners>           <add name="rolling flat file trace listener" type="microsoft.practices.enterpriselibrary.logging.tracelisteners.rollingflatfiletracelistener, microsoft.practices.enterpriselibrary.logging"               listenerdatatype="microsoft.practices.enterpriselibrary.logging.configuration.rollingflatfiletracelistenerdata, microsoft.practices.enterpriselibrary.logging"               formatter="text formatter" />         </listeners>         <formatters>           <add type="microsoft.practices.enterpriselibrary.logging.formatters.textformatter, microsoft.practices.enterpriselibrary.logging"               template="timestamp: {timestamp}{newline}&#xa;message: {message}{newline}&#xa;category: {category}{newline}&#xa;priority: {priority}{newline}&#xa;eventid: {eventid}{newline}&#xa;severity: {severity}{newline}&#xa;title:{title}{newline}&#xa;machine: {localmachine}{newline}&#xa;app domain: {localappdomain}{newline}&#xa;processid: {localprocessid}{newline}&#xa;process name: {localprocessname}{newline}&#xa;thread name: {threadname}{newline}&#xa;win32 threadid:{win32threadid}{newline}&#xa;extended properties: {dictionary({key} - {value}{newline})}"               name="text formatter" />         </formatters>         <categorysources>           <add switchvalue="all" name="general">             <listeners>               <add name="rolling flat file trace listener" />             </listeners>           </add>         </categorysources>         <specialsources>           <allevents switchvalue="all" name="all events" />           <notprocessed switchvalue="all" name="unprocessed category" />           <errors switchvalue="all" name="logging errors &amp; warnings">             <listeners>               <add name="rolling flat file trace listener" />             </listeners>           </errors>         </specialsources>       </loggingconfiguration>     </configuration>       <?xml version="1.0" encoding="utf-8" ?>     <configuration>       <configsections>         <section name="exceptionhandling" type="microsoft.practices.enterpriselibrary.exceptionhandling.configuration.exceptionhandlingsettings, microsoft.practices.enterpriselibrary.exceptionhandling" requirepermission="true" />       </configsections>       <exceptionhandling>         <exceptionpolicies>           <add name="policy">             <exceptiontypes>               <add name="notimplementedexception" type="system.notimplementedexception, mscorlib"                 posthandlingaction="none">                 <exceptionhandlers>                   <add name="logging exception handler" type="microsoft.practices.enterpriselibrary.exceptionhandling.logging.loggingexceptionhandler, microsoft.practices.enterpriselibrary.exceptionhandling.logging"                     logcategory="general" eventid="100" severity="error" title="enterprise library exception handling"                     formattertype="microsoft.practices.enterpriselibrary.exceptionhandling.textexceptionformatter, microsoft.practices.enterpriselibrary.exceptionhandling"                     priority="0" />                 </exceptionhandlers>               </add>             </exceptiontypes>           </add>         </exceptionpolicies>       </exceptionhandling>     </configuration> 

there few ways have separate configuration files:

  • redirectedsection
  • built-in .net configsource
  • fileconfigurationsource

redirectedsections approach

i think error in configuration haven't redirected 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 built-in .net configsource redirect configsections 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 fileconfigurationsource @ bootstrap load appropriate configuration files. since load fileconfigurationsource directly @ startup app.config not need 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 wanted ability modify config file load (i.e. "data.config") use appsetting specify file load.


Comments