如果我在我的应用程序运行时安装了一个提供者。然后调用DbProviderFactories.GetFactory(providerClass)查看是否安装了它,调用它时出现异常。但如果我退出我的应用程序并重新启动它,它就会看到它。
我必须调用什么才能让DbProviderFactories.GetFactory(providerClass)重新读取machine.config?
发布于 2012-10-16 00:39:41
提供程序信息在第一次使用时从静态数据表中读取,然后总是返回该值,直到应用程序重新启动,当然也会重新创建该数据表。
以下代码(首次发布于Windward Wrocks)将刷新内部缓存并强制重新读取:
/// <summary>
/// Force DbProviderFactories to re-read machine.config on the next call to
/// DbProviderFactories.GetFactoryClasses().
/// </summary>
static public void FlushDbProviderFactoriesCache()
{
try
{
FieldInfo initStateFieldInfo = typeof(DbProviderFactories).GetField("_initState",
BindingFlags.Static | BindingFlags.NonPublic);
if (initStateFieldInfo != null)
{
ConnectionState state = ConnectionState.Closed;
object initState = initStateFieldInfo.GetValue(state);
if (initState is ConnectionState)
{
state = (ConnectionState)initState;
if (state != ConnectionState.Closed)
initStateFieldInfo.SetValue(state, ConnectionState.Closed);
ConfigurationManager.RefreshSection("system.data");
}
}
}
catch (Exception)
{
// nada
}
}https://stackoverflow.com/questions/12900107
复制相似问题