DbProviderFactories for .NET Ошибка - PullRequest
9 голосов
/ 15 января 2010

У меня проблемы с получением библиотеки ODP.NEt для работы с .NET DBProviderFactories. Я получаю следующую ошибку с этим кодом:

_DBFactory = DbProviderFactories.GetFactory(providerName);

Произошла ошибка при создании обработчика раздела конфигурации для system.data: столбец «InvariantName» должен быть уникальным. Значение «Oracle.DataAccess.Client» уже присутствует.

с этим провайдеромИмя: Oracle.DataAccess.Client

И следующая запись в 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>

Кто-нибудь знает, что не так? Я не думаю, что это настроено дважды где-либо.

Ответы [ 4 ]

8 голосов
/ 16 марта 2010

Если вы установили ODP.net (например, с помощью универсального установщика oracle, а не xcopy), вы обнаружите тот же DbProviderFactories / add в machine.config.

Итак, добавление его в ваш web.config - это добавление во второй раз, поэтому дублируйте Oracle.DataAccess.Client!

6 голосов
/ 22 января 2013

Можете ли вы сделать ниже? (Обратите внимание на «очистить»)

  <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>
2 голосов
/ 25 сентября 2015

Следует отметить, что <clear /> очистит все DbProviderFactories, что вы, возможно, не захотите делать, в зависимости от вашей ситуации.

Вы также можете просто удалить этот класс прямо перед его повторным добавлением, добавив следующую строку:

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

Вот как будет выглядеть все <system.data>:

  <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>

Это может быть полезно, если ваша локальная машина и серверная среда не имеют совпадающих файлов конфигурации, таких как machine.config.

Другая вещь, которую вы можете сделать, это просто удалить ее из вашего web.config, при условии, что настройка в вашем machine.config будет работать. Однако я бы протестировал это как на вашей машине разработки, так и на ваших серверах. В моем случае это работало на одном, но не на другом, потому что файлы machine.config не совпадали. Для решения этой проблемы я добавил этот же параметр в файл machine.config на сервере без <remove invariant="Oracle.ManagedDataAccess.Client" />, например, так:

  <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 голос
/ 30 сентября 2017

Скорее всего, произошел сбой в разделе конфигурации файла DbProviderFactories. Проверьте, есть ли дополнительная строка Oracle.DataAccess.Client, которая остается после удаления клиента Oracle.

...