처음 사용할 때 공급자 정보가 정적 데이터 테이블에서 읽히고 응용 프로그램이 다시 시작될 때까지 해당 값이 항상 반환되고 데이터 테이블은 다시 만들어집니다.
(첫번째 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
}
}
을