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. Он не может быть установлен
однако, он установлен, потому что
- я вижу dll в GAC.
- он упоминается в машину.конфиг.
- на него ссылается мой проект.
- я фактически использую его для генерации моего EDMX из базы данных.
- я проверил, что я ссылаюсь на правильную версию (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":
работает как 32-битный процесс. После перекомпиляции с флагом un-checked все начало работать.
Я получил ту же ошибку при открытии страницы через IIS, 64bit Win7.
мое решение:
перейдите в диспетчер IIS --> пул приложений --> Дополнительные параметры --> включить 32-разрядные приложения.
эта ошибка немного вводит в заблуждение, потому что она также может быть вызвана запуском в неправильных контекстах процессора. Убедитесь, что вы разрешаете 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.