2012-10-15 4 views
0

내 앱이 실행되는 동안 제공자를 설치하는 경우. 그런 다음 DbProviderFactories.GetFactory (providerClass)를 호출하여 설치되어 있는지 확인합니다. 예외가 발생합니다. 하지만 내 앱을 종료하고 앱을 다시 시작하면 보게됩니다.DbProviderFactories.GetFactory (providerClass)에 방금 설치된 공급자가 표시되지 않습니다.

machine.config를 다시 읽으려면 DbProviderFactories.GetFactory (providerClass)를 얻기 위해 무엇을 호출해야합니까?

답변

1

처음 사용할 때 공급자 정보가 정적 데이터 테이블에서 읽히고 응용 프로그램이 다시 시작될 때까지 해당 값이 항상 반환되고 데이터 테이블은 다시 만들어집니다.

(첫번째 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 
    } 
    }