Поставщик ADO.NET «Oracle.ManagedDataAccess.Client» либо не зарегистрирован в файле конфигурации компьютера или приложения, либо не может быть загружен
я использую.NET4.5.1
, MVC5
, EF6
, сOracle.ManagedDataAccess 4.121.1.0
а такжеOracle.ManagedDataAccess.EntityFramework 6.121.2.0
Мне удалось сгенерировать модель из существующей базы данных (часть ее, добавив таблицу за таблицей), приложение прекрасно собирается.
Однако, когда я пытаюсь запустить тестовый запрос, чтобы увидеть, может ли он получить данные
public ActionResult Cancellations()
{
var factoryClasses = System.Data.Common.DbProviderFactories.GetFactoryClasses();
using (var db = new Entities())
{
var cancelationStatuses = new[] {3, 7, 9};
var result = db.TRANSACTIONDETAIL.Where(o => cancelationStatuses.Contains(o.TRANSACTIONSTATUSID));
return View(result);
}
}
это не удается (наvar result = ...
) сUnable to find the requested .Net Framework Data Provider. It may not be installed.
Когда пытаешься искать DbProviderFactories
действительно нет ничего в коллекции (var factoryClasses =
).
тем не мениеЯ установил 12c 4 (ODTwithODAC121024) и 11g (ODTwithODAC1120320_32bit), и перезапустили машину.
База данных работает на 11g, и я могу получить к нему доступ сPL/SQL developer
Web.config выглядит следующим образом:
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="Oracle.ManagedDataAccess.Client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
.....
<connectionStrings>
.....
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" />
<add name="Entities" connectionString="metadata=res://*/OracleDb.csdl|res://*/OracleDb.ssdl|res://*/OracleDb.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string='data source=******" providerName="System.Data.EntityClient" /> </connectionStrings>
......
<system.data>
<DbProviderFactories>
<!-- Remove in case this is already defined in machine.config -->
<add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<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>
Мое предположение, что это не удалось, потому что Oracle не регистрируется вDbProviderFactories
или где-то
Как мне зарегистрировать Oracle в DbProviderFactories? Или, если это не так, что не так с моей настройкой?