/// <summary> /// 检查传入的数据库提供程序名称 <paramref name="providerName"/> 是否在当前应用程序运行环境中已经注册。 /// </summary> /// <param name="providerName">数据库提供程序名称。</param> /// <exception cref="InvalidOperationException">如果传入的数据库提供程序名称 <paramref name="providerName"/> 在当前应用程序运行环境中尚未注册,则抛出该异常。</exception> internal static void CheckProviderNameRegisted(string providerName) { if (!DbProviderFactoryClasses.Any(item => item.InvariantName == providerName)) { throw new InvalidOperationException(string.Format(Resources.UnregisteredProviderName, providerName)); } }
/// <summary> /// 获取该数据库提供程序的名称。 /// </summary> /// <param name="factory">表示一个 <see cref="System.Data.Common.DbProviderFactory"/> 对象。</param> /// <returns>该数据库提供程序的名称,例如 <see cref="System.Data.SqlClient.SqlClientFactory"/> 对象返回 "System.Data.SqlClient"。</returns> public static string GetProviderName(this DbProviderFactory factory) { Type factoryType = factory.GetType(); string providerName = null; if (!_factoryMappings.Value.TryGetValue(factoryType, out providerName)) { DbProviderFactoryClass factoryClass = DbProviderFactoryClasses.FirstOrDefault(item => Type.GetType(item.AssemblyQualifiedName) == factoryType); providerName = factoryClass == null ? factoryType.Namespace : factoryClass.InvariantName; _factoryMappings.Value.Add(factoryType, providerName); } return(providerName); }