/// <summary>
/// 通过connectionStringName对象创建DbConfiguration对象(可以用于配置文件中有多个数据库连接字符串配置)
/// </summary>
/// <param name="connectionStringName"></param>
/// <returns></returns>
public static DbConfiguration Configure(string connectionStringName)
{
Guard.NotNullOrEmpty(connectionStringName, "connectionStringName");
DbConfiguration cfg;
if (items.TryGetValue(connectionStringName, out cfg))
return cfg;
var item = System.Configuration.ConfigurationManager.ConnectionStrings[connectionStringName];
if (item == null)
throw new ConfigurationErrorsException(string.Format(Res.ConnectionStringNameInvalid, connectionStringName));
if (string.IsNullOrEmpty(item.ProviderName))
throw new ConfigurationErrorsException("connectionString.ProviderName");
var connectionString = item.ConnectionString;
if (string.IsNullOrEmpty(connectionString))
throw new ConfigurationErrorsException("ConnectionString");
var providerName = providerNames.FirstOrDefault(p => p == item.ProviderName);
if (providerName.IsNullOrEmpty())
throw new ConfigurationErrorsException(item.ProviderName + " Provider name not exists or invalid for" + connectionStringName);
DbProviderFactory factory = null;
try
{
factory = DbProviderFactories.GetFactory(providerName);
}
catch (Exception ex)
{
throw new ConfigurationErrorsException(providerName + " Provider name invalid for" + connectionStringName, ex);
}
cfg = new DbConfiguration(providerName, item.Name, connectionString, factory);
lock (items)
items[cfg.Name] = cfg;
AutoMatchDialect(cfg, connectionString, providerName, factory);
if (System.Configuration.ConfigurationManager.ConnectionStrings.Count == 1)
cfg.MakeDefault();
return cfg;
}