http://stackoverflow.com/questions/4335827/changing-nhibernate-connectionstringcss
http://www.nhforge.org/wikis/howtonh/dynamically-change-user-info-in-connection-string.aspxide
In some cases our clients has to use the same database user id in each connection, so they can use audit and security features of their database system (and their DBAs will be happy [:)]). this
To do that in Nh We can use the ConnectionProvider facility. Just derive a class from the standard DriverConnectionProvider class: spa
public class DynamicConnectionProvider : DriverConnectionProvider
{
private string _connectionString;
public override void Configure(IDictionary<string, string> settings)
{
// Connection string in the configuration overrides named connection string
if (!settings.TryGetValue(NHibernate.Cfg.Environment.ConnectionString,out _connectionString))
_connectionString = GetNamedConnectionString(settings);
if (_connectionString == null)
{
throw new HibernateException("Could not find connection string setting (set "
+ NHibernate.Cfg.Environment.ConnectionString + " or "
+ NHibernate.Cfg.Environment.ConnectionStringName + " property)");
}
ConfigureDriver(settings);
}
This is necessary because the original connection string is private, but just copy the code from base method. hibernate
The real magic is in "ConnectionString" property, it is called when nh has to connect in a Session. You have to override it so you can make the changes you need. code
protected override string ConnectionString
{
get { return FixConnectionString(_connectionString); }
}
In this case FixConnectionString read the user info from some environment variable and inject it in the connection string. htm
Finally configure NH to use the ConnectionProvider: blog
<property name="connection.provider">
MyAssembly.DynamicConnectionProvider, MyAssembly
</property>