2010-01-15 15 views
7

Mam problem z pobieraniem biblioteki ODP.NEt do pracy z .NET DBProviderFactories. Otrzymuję następujący błąd z tym kodem:DbProviderFactories for .NET Error

_DBFactory = DbProviderFactories.GetFactory(providerName); 

Wystąpił błąd tworząc obsługi sekcji konfiguracji System.Data: kolumna InvariantName 'jest zmuszony do być unikalne. Wartość "Oracle.DataAccess.Client" jest już obecna.

z tym providerName: Oracle.DataAccess.Client

i następujący wpis w pliku web.config:

<system.data> 
    <DbProviderFactories> 
     <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
    </system.data> 

Czy ktoś wie co jest nie tak? Nie sądzę, że mam to dwa razy ustawione.

+0

ten sam problem i rozwiązać http://stackoverflow.com/questions/4225908/error-when-adding-a-configuration-to-app-config-file –

Odpowiedz

6

Jeśli zainstalowałeś ODP.net (np. Używając uniwersalnego instalatora Oracle, w przeciwieństwie do xcopy), znajdziesz te same DbProviderFactories/add in machine.config.

Dodanie go do pliku web.config powoduje dodanie go po raz drugi - a więc zduplikuj Oracle.DataAccess.Client!

+0

Więc które miejsce jest "właściwe"? – ThatAintWorking

+1

Ten problem może również wystąpić, jeśli zainstalowałeś ODP.net przed zainstalowaniem wersji .NET, której używasz, w moim przypadku .NET4. –

+0

@FredrikC: Dzięki za komentarz jest jakieś polecenie, aby zarejestrować je ponownie –

5

Czy możesz wykonać poniższe czynności? (Zauważ, że „czysty”)

<system.data> 
    <DbProviderFactories> 

     <clear /> 

     <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 

    </DbProviderFactories> 
    </system.data> 
1

Należy zauważyć, że <clear /> skasuje wszystkie DbProviderFactories który może nie chcesz zrobić, w zależności od sytuacji.

Można też po prostu usunąć to prawo klasa zanim ponownie dodać go poprzez dodanie tej linii:

<remove invariant="Oracle.ManagedDataAccess.Client" />

Oto jak cała <system.data> będzie wyglądać:

<system.data> 
    <DbProviderFactories> 
     <remove invariant="Oracle.ManagedDataAccess.Client" /> 
     <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" 
      type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
    </system.data> 

ten może być przydatne, jeśli lokalne środowiska maszyn i serwerów nie mają pasujących plików konfiguracyjnych, takich jak machine.config.

Inną rzeczą, którą możesz zrobić, to po prostu usunąć ją ze swojego web.config razem, zakładając, że ustawienie w twoim komputerze.config zadziała. Testowałem to jednak zarówno na maszynie programistycznej, jak i na serwerach. W moim przypadku działał na jednym, ale nie na drugim, ponieważ pliki machine.config nie pasowały. Aby rozwiązać dodałem to samo ustawienie na machine.config na serwerze bez <remove invariant="Oracle.ManagedDataAccess.Client" /> tak:

<system.data> 
    <DbProviderFactories> 
     <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" 
      type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
    </system.data> 
1

Najprawdopodobniej sekcja DbProviderFactories plików maszyna config rozbił. Sprawdź, czy istnieje dodatkowa linia Oracle.DataAccess.Client, która nadal pozostaje po odinstalowaniu klienta Oracle.