Ошибка ODP.NET Не удалось найти запрошенный поставщик данных .Net Framework
Я пытаюсь разработать приложение ASP.NET MVC 4.0 с использованием Oracle 11g Express и платформы .NET 4.0. Я могу подключиться к БД с помощью поставщика ODP.NET, а также сгенерировать мой EDMX для базы данных. Что я могу'Сделать это - запросить базовую БД, используя структуру сущностей. При создании экземпляра моего DbContext с использованием сгенерированной connectionString Visual Studio я получаю следующую ошибку:
Не удалось найти запрошенный поставщик данных .Net Framework. Может не быть установлен
Тем не менее, он установлен потому, что
Я могу видеть DLL в GAC.Это упоминается в machine.config.На него ссылается мой проект.Я на самом деле использую его для генерации моего EDMX из базы данных.Я подтвердил, что ссылаюсь на правильную версию (4.112.3.0) вездеЯ запускаю код локально на Cassini, и мое оборудование имеет 32-битную архитектуру, поэтому я предполагаю, что смогу использовать только 32-битную DLLс, так чтоЭто не проблема архитектуры.
Конкретный фрагмент кода таков:
public class MyContext : ObjectContext, IUnitOfWork
{
public MyContext()
: base(ConfigurationManager
.ConnectionStrings["OracleEntities"]
.ConnectionString)//Connectionstring is verified
{}
}
Пожалуйста, помогите мне, прежде чем я оставлю все, отрасту бороду и живу где-нибудь в горах.
РЕШЕНИЕ: Так как у меня нетЯ не видел никаких упоминаний о решении, яЯ упомяну это здесь для будущих поколений. Андрей ниже спросил о моем формате строки подключения, и хотя я был настроен, я пошел и посмотрел. Вот что я увидел:
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Если это по-прежнему не помогает, взгляните на machine.config. Вы должны увидеть следующий раздел:
Если <удалить инвариант = "Oracle.DataAccess.Client "/> присутствует, закомментируйте и попробуйте еще раз, в противном случае, если этоs не там, вставьте это и попробуйте снова.