/// <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; }