ODP.NET ошибка не удается найти Requested.Net поставщик данных Framework

Я пытаюсь разработать ASP.NET приложение MVC 4.0 с использованием Oracle 11g Express и платформы .NET 4.0. Я могу подключиться к DB, используя ODP.NET поставщик, а также может генерировать мой EDMX против базы данных. Что я не могу сделать, так это запросить базовую БД с помощью entity framework. При создании экземпляра моего DbContext с помощью connectionString Visual Studio, я получаю следующую ошибку:

не удалось найти запрошенного поставщика данных .Net Framework. Он не может быть установлен

однако, он установлен, потому что

  1. я вижу dll в GAC.
  2. он упоминается в машину.конфиг.
  3. на него ссылается мой проект.
  4. я фактически использую его для генерации моего EDMX из базы данных.
  5. я проверил, что я ссылаюсь на правильную версию (4.112.3.0) везде

я запускаю код локально на Cassini, и мое оборудование 32-разрядная архитектура, поэтому я бы предположил, что смогу использовать только 32-разрядные DLL, поэтому это не проблема архитектуры.

конкретный бит кода таков:

public class MyContext : ObjectContext, IUnitOfWork
{
    public MyContext() 
    : base(ConfigurationManager
          .ConnectionStrings["OracleEntities"]
          .ConnectionString)//Connectionstring is verified
    {}
}

пожалуйста, помогите мне, прежде чем я оставлю все, отрастить бороду и пойти жить в горы где-то.

решение: поскольку я не видел никакого упоминания о решении, я упомяну его здесь для будущих поколений. Андрей ниже спросил о моем формате строки подключения и хотя я был скептиком, я пошел и посмотрел. Вот что я увидел:--6-->

metadata=res://*/OracleModel.csdl|res://*/
OracleModel.ssdl|res://*/
OracleModel.msl;
provider=provider=Oracle.DataAccess.Client;
provider connection string="DATA SOURCE=localhost:1521;
PASSWORD=xxx;PERSIST SECURITY INFO=True;USER ID=xxx
обратите особое внимание на строку
provider=provider=Oracle.DataAccess.Client;

это должны, на самом деле, читайте

provider=Oracle.DataAccess.Client;

в противном случае вы говорите EF использовать [provider.dll], что не является реальной вещью. Также обратите внимание, что кажется, что свойство providerName элемента connectionString было переопределено или проигнорировано.

обновление 2: если это еще не помогает, посмотрите на машину.конфиг. Вы должны увидеть следующий раздел:

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

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

</DbProviderFactories>

если присутствует, прокомментируйте его и повторите попытку, иначе, если его там нет, вставьте его и повторите попытку.

8 ответов


попробуйте этот формат строки подключения:

Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;

Проверьте примеры строк подключения для Oracle db http://www.connectionstrings.com/oracle


для нас это был 32 против 64-битного процесса.

сервер 64 бит. В ODP.NET (клиент Oracle) установлен также 64 бит. Наше приложение скомпилировано с целевой платформой "Any CPU " и флагом" Prefer 32-bit":

http://grab.by/v5ki

работает как 32-битный процесс. После перекомпиляции с флагом un-checked все начало работать.


Я получил ту же ошибку при открытии страницы через IIS, 64bit Win7.

мое решение:

перейдите в диспетчер IIS --> пул приложений --> Дополнительные параметры --> включить 32-разрядные приложения.

enter image description here


эта ошибка немного вводит в заблуждение, потому что она также может быть вызвана запуском в неправильных контекстах процессора. Убедитесь, что вы разрешаете 32-разрядный, если используете 32-разрядный драйвер Oracle. Это можно сделать как параметр в IIS, или вы можете настроить приложение для запуска в качестве приложения IIS Express.


У меня была похожая проблема. Он был разрешен путем добавления пакета NuGet. У меня уже был Oracle.ManagedDataAccess.EntityFramework доступен в моих ссылках из установки ODT, но он давал Entity Framework 5 конфликт с 6 в подробном журнале. Как только я добавил пакет NuGet, все начало работать.

  • для установки щелкните правой кнопкой мыши ссылки --> Управление пакетами NuGet... --> Поиск Oracle на вкладке Обзор --> выберите Оракул.ManagedDataAccess.EntityFramework и установите последнюю версию.

другое возможное решение для кого-то там.

мой веб-приложение работает на моем тестовом сервере, но когда я начал развивать мой сервер я получил ту же ошибку: Не удалось найти запрошенный поставщик данных .Net Framework. Он не может быть установлен

Если вы сравните две строки подключения ниже, вы заметите, что вызывающий мою проблему имел "управляемое" слово в имени поставщика. На самом деле я использую неуправляемую версию поставщика Oracle. Следовательно, я получал ошибку на моем Живом сервере, а не на моем тестовом сервере.

    **ORIGINAL:**
    connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST   SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.ManagedDataAccess.Client"


    **NEW:**
    connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST     SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.DataAccess.Client"

вот что сработало для меня. На моем сервере уже установлен клиент Oracle. (версии 11.2.0)

  • скачать с ODAC для загрузки Windows страница ODP.NET управляемый драйвер
    (Я выбрал Октябрь. 2015 релиз, 2.43 MB скачать)

  • извлеките zip-файл, возьмите \lib\net40\Oracle.ManagedDataAccess.dll и поместите его в папку bin.

  • в интернете.config, добавьте ссылку на в ODP.NET управляемый драйвер под системой.data\DbProviderFactories объясняется в ответ.


Я фактически загрузил ODAC и установил его. Затем я добавляю ссылку и нашел упомянутый пакет roadrunner71.