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.