About Connection Strings - lobodava/artisan-orm GitHub Wiki

RepositoryBase, when is instantiated, looks for a connection string by the connection string name.

RepositoryBase has overloaded constructors.

If RepositoryBase is created without paremeters, than it looks for a connection string in Web.config (or App.config) file by default name "DatabaseConnection":

<configuration>
  <connectionStrings>
    <add name="DatabaseConnection" 
      connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Artisan;Integrated Security=True;Trust Server Certificate=True;" />
  </connectionStrings>
</configuration> 

In order to use another connection string name from *.config file pass that name to the base constructor:

public class Repository: RepositoryBase
{
   public Repository () : base ("AnotherConnection") {}
}
<configuration>
  <connectionStrings>
    <add name="AnotherConnection" 
      connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Artisan;Integrated Security=True;Trust Server Certificate=True;" />
  </connectionStrings>
</configuration> 

If to pass the connection string to the RepositoryBase constructor, then this connection string will be used:

public class Repository: RepositoryBase
{
   private string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=Artisan;Integrated Security=True;Trust Server Certificate=True;";
   public Repository () : base (connectionString) {}
}

Team development

When a project is being developed by a team, each of developers can have its own SQL Server and database on local machine, so the connection strings may differ.

For that case Artisan.Orm provides a way to read a connection string for a specific machine name.

Thus if the *.config file contains several connection strings, Artisan.Orm will be looking for the names wich starts with machine name returned from Environment.MachineName in format {MachineName}.{ConnectionStringName}:

<configuration>
  <connectionStrings>

    <add name="SMITH-PC.DatabaseConnection" 
      connectionString="Data Source=.\SMITH-SQL;Initial Catalog=Artisan;Integrated Security=True;Trust Server Certificate=True;" />

    <add name="POTTER-PC.DatabaseConnection" 
      connectionString="Data Source=.\POTTER-SQL;Initial Catalog=Artisan;Integrated Security=True;Trust Server Certificate=True;" />

    <add name="DatabaseConnection" 
      connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Artisan;Integrated Security=True;Trust Server Certificate=True;" />

  </connectionStrings>
</configuration> 

If the connection string name in format {MachineName}{ConnectionStringName} is not found, the {ConnectionStringName} will be taken.

One more option, is to add connection string dependence of Active Solution Configuration.

If to add connection string name in format {MachineName}.{Configuration}.{ConnectionStringName} or {Configuration}.{ConnectionStringName} and add the following code in your repository class:

#if DEBUG
    public Repository () : base ("AnotherConnection", "Debug") {}
#else
    public Repository () : base ("AnotherConnection", "Release") {}
#endif

Then connection string names can be extended:

<configuration>
  <connectionStrings>

    <add name="POTTER-PC.Debug.AnotherConnection" 
      connectionString="Data Source=.\POTTER-SQL;Initial Catalog=Artisan-Debug;Integrated Security=True;Trust Server Certificate=True;" />

    <add name="Debug.AnotherConnection" 
      connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Artisan-Debug;Integrated Security=True;Trust Server Certificate=True;" />    

    <add name="AnotherConnection" 
      connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Artisan;Integrated Security=True;Trust Server Certificate=True;" />

  </connectionStrings>
</configuration> 

The priority of formats for the search:

  • {MachineName}.{Configuration}.{ConnectionStringName}
  • {MachineName}.{ConnectionStringName}
  • {Configuration}.{ConnectionStringName}
  • {ConnectionStringName}

How it can be useful?

Although there is *.config file transformation in Visual Studio, in some cases it does not work for local development.