MakeDefault() public method

把当前DbConfiguration标志为缺省DbConfiguration
public MakeDefault ( ) : DbConfiguration
return DbConfiguration
コード例 #1
0
        /// <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;
        }