c# - solicitado - odp.net visual studio 2017
Error de ODP.NET No se puede encontrar el proveedor de datos de.Net Framework solicitado (7)
Estoy tratando de desarrollar una aplicación ASP.NET MVC 4.0 utilizando Oracle 11g Express y el framework .NET 4.0. Puedo conectarme al DB usando el proveedor ODP.NET y también puedo generar mi EDMX contra la base de datos. Lo que no puedo hacer es consultar el DB subyacente usando el marco de entidad. Cuando crea una instancia de mi DbContext utilizando el connectionString Visual Studio generado, aparece el siguiente error:
No se puede encontrar el Proveedor de datos de .Net Framework solicitado. No puede ser instalado
Sin embargo, está instalado porque
- Puedo ver el dll en el GAC.
- Se menciona en machine.config.
- Mi proyecto lo menciona.
- De hecho, lo uso para generar mi EDMX desde la base de datos.
- He verificado que me estoy refiriendo a la versión correcta (4.112.3.0) en todas partes
Estoy ejecutando el código localmente en Cassini y mi hardware es arquitectura de 32 bits, así que supongo que solo podría usar DLL de 32 bits, por lo que no es un problema de arquitectura.
El bit específico de código es como tal:
public class MyContext : ObjectContext, IUnitOfWork
{
public MyContext()
: base(ConfigurationManager
.ConnectionStrings["OracleEntities"]
.ConnectionString)//Connectionstring is verified
{}
}
Por favor, ayúdenme antes de dejar todo, dejarme crecer la barba e irme a vivir a las montañas en alguna parte.
SOLUCIÓN : dado que no he visto ninguna mención de la solución, la mencionaré aquí para las generaciones futuras. A continuación, Andrei Mikhalevich preguntó sobre mi formato de cadena de conexión y, aunque era un poco esquemático, fui y eché un vistazo. Esto es lo que vi:
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
Ahora, preste especial atención a la línea
provider=provider=Oracle.DataAccess.Client;
debería , de hecho, leer
provider=Oracle.DataAccess.Client;
de lo contrario le está diciendo a EF que use [provider.dll], que no es real. También tenga en cuenta que parece que la propiedad providerName del elemento connectionString parece haber sido anulada o ignorada.
ACTUALIZACIÓN 2 : Si esto TODAVÍA no ayuda, eche un vistazo a machine.config. Deberías ver la siguiente sección:
<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>
Si <remove invariant = "Oracle.DataAccess.Client" /> está presente, coméntelo e inténtelo de nuevo, de lo contrario, si no está allí, póngalo y vuelva a intentarlo.
Pruebe este formato de cadena de conexión:
Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;
Vea ejemplos de cadenas de conexión para Oracle db http://www.connectionstrings.com/oracle
Este error es un poco engañoso porque también puede deberse a que se ejecuta en contextos de CPU incorrectos. Asegúrese de permitir 32 bits si usa un controlador Oracle de 32 bits. Esto se puede hacer como una configuración bajo IIS o puede configurar su aplicación para que se ejecute como una aplicación IIS Express.
Para nosotros fue un proceso de 32 contra 64 bits.
El servidor es de 64 bits. El ODP.NET (Oracle Client) instalado también es de 64 bits. Nuestra aplicación compilada con la plataforma Target "Any CPU" y "Prefer 32-bit" flag SET:
se estaba ejecutando como un proceso de 32 bits. Una vez recompilado con la bandera sin marcar todo comenzó a funcionar.
Obtuve el mismo error al abrir la página a través de IIS, Win7 de 64 bits.
Mi solución es:
Vaya a Administrador de IIS -> Grupo de aplicaciones -> Configuración avanzada -> Activar aplicaciones de 32 bits.
Otra posible solución para alguien allá afuera.
Mi aplicación web funcionaba bien en mi servidor de prueba, pero cuando comencé a desarrollar para mi servidor en vivo, recibí el mismo error: no se pudo encontrar el proveedor de datos de .Net Framework solicitado. No puede ser instalado
Si compara las dos cadenas de conexión a continuación, notará que el que está causando mi problema tiene la palabra "Administrado" en el nombre del proveedor. En realidad estoy usando la versión no administrada del proveedor de Oracle. Por lo tanto, estaba obteniendo el error en mi servidor en vivo y no en mi servidor de prueba.
**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"
Tuve un problema similar. Se resolvió agregando un paquete NuGet. Ya tenía Oracle.ManagedDataAccess.EntityFramework disponible en mis referencias desde la instalación de ODT, pero estaba dando un conflicto de Entity Framework 5 con 6 en el registro detallado. Una vez que agregué el paquete NuGet, todo comenzó a funcionar.
- Para instalar, haga clic con el botón secundario en Referencias -> Gestionar paquetes NuGet ... -> Busque Oracle en la pestaña Examinar -> Elija Oracle.ManagedDataAccess.EntityFramework e instale la última versión.
Esto es lo que funcionó para mí. Mi servidor ya tenía un cliente de Oracle instalado. (versión 11.2.0)
Descargue de la página de descargas de ODAC para Windows el controlador administrado ODP.NET
(Elegí el lanzamiento de octubre de 2015, descarga de 2.43 MB)Extraiga el archivo zip, tome / lib / net40 / Oracle.ManagedDataAccess.dll y colóquelo en la carpeta bin.
En web.config, agregue una referencia al controlador administrado ODP.NET en system.data / DbProviderFactories explicado en esta respuesta .
Eso es.
Para confirmar, ejecute el código de esta respuesta para ver si el proveedor de ODP.NET está instalado. Debería ver ODP.NET, controlador administrado en la lista.