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.