2013-07-08 24 views
8

Sto cercando di sviluppare un'applicazione ASP.NET MVC 4.0 utilizzando Oracle 11g Express e il framework .NET 4.0. Posso connettermi al DB usando il provider ODP.NET e posso anche generare il mio EDMX contro il database. Quello che non posso fare è interrogare il DB sottostante usando l'entity framework. Quando un'istanza mia DbContext utilizzando il connectionstring Visual Studio ha generato, ottengo il seguente errore:Errore ODP.NET Impossibile trovare il provider di dati Framework .Net richiesto

Unable to find the requested .Net Framework Data Provider. It may not be installed

Tuttavia, è installato perché

  1. posso vedere la dll nel GAC.
  2. È menzionato in machine.config.
  3. Si fa riferimento al mio progetto.
  4. Lo uso effettivamente per generare il mio EDMX dal database.
  5. Ho verificato che sto referenziazione la versione corretta (4.112.3.0) ovunque

Sono in esecuzione il codice localmente su Cassini e il mio hardware è l'architettura a 32 bit, quindi vorrei assumere sarei solo in grado di utilizzare DLL a 32 bit, quindi non è un problema di architettura.

Il bit di codice specifico è come tale:

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

please help me prima che io lascio tutto, farsi crescere la barba e andare a vivere in montagna da qualche parte.

SOLUZIONE: Poiché non ho visto alcuna menzione della soluzione, la menzionerò qui per le generazioni future. Andrei Mikhalevich di sotto mi ha chiesto del mio formato di stringhe di connessione e, anche se ero un programmatore, sono andato a dare un'occhiata. Questo è quello che ho visto:

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 

Ora, prestare particolare attenzione alla linea

provider=provider=Oracle.DataAccess.Client; 

si dovrebbe, infatti, leggere

provider=Oracle.DataAccess.Client; 

altrimenti stai dicendo EF usare [provider.dll], che non è una cosa reale. Si noti inoltre che sembra che la proprietà providerName dell'elemento connectionString sembra essere stata ignorata o ignorata.

UPDATE 2: Se questo ANCORA non aiuta, dare un'occhiata a machine.config. Si dovrebbe vedere la sezione seguente:

<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> 

Se < remove invariante = "Oracle.DataAccess.Client"/> è presente, commento fuori e tentare di nuovo, in caso contrario, se non è lì, metterlo in e prova ancora.

+0

Sì. La tua risposta mi ha indirizzato nella giusta direzione, quindi la contrassegnerò come risposta e upvote. –

+0

Grazie amico :). Buona fortuna – Andrei

+0

LOL. Ho avuto di nuovo lo stesso errore e la mia ricerca su google per una risposta mi ha riportato alla mia stessa domanda. –

risposta

1

Prova questo formato stringa di connessione:

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

Partenza esempi di stringhe di connessione per Oracle db http://www.connectionstrings.com/oracle

+0

La soluzione aveva a che fare con il formato della stringa di connessione, ma non nel modo previsto. Vedi l'aggiornamento. –

1

Un'altra possibile soluzione per qualcuno là fuori.

La mia webapp funzionava bene sul mio server di test ma quando ho iniziato a sviluppare per il mio server live ho ricevuto lo stesso errore: Impossibile trovare il provider di dati .Net Framework richiesto. Potrebbe non essere installato

Se si confrontano le due stringhe di connessione di seguito, si noterà che quella che causa il mio problema ha la parola "Gestito" nel nome del provider. In realtà sto usando la versione non gestita del provider Oracle. Quindi stavo ricevendo l'errore sul mio server live e non sul mio server di test.

**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" 
2

Questo errore è un po 'fuorviante perché può anche essere causato dall'esecuzione in contesti CPU errati. Assicurati di consentire 32 bit se utilizzi un driver Oracle a 32 bit. Questa operazione può essere eseguita come impostazione in IIS oppure è possibile impostare l'applicazione in modo che venga eseguita come applicazione IIS Express.

+0

grazie, questo mi ha aiutato a risparmiare alcune ore di tempo. – user1841243

7

Per noi è stato un processo da 32 a 64 bit.

Il server è a 64 bit. Anche ODP.NET (Client Oracle) installato è a 64 bit. La nostra applicazione compilata con la piattaforma di destinazione "Qualsiasi CPU" e "Preferisco a 32 bit" bandiera SET:

http://grab.by/v5ki

era in esecuzione come processo a 32 bit. Una volta ricompilato con la bandiera deselezionata, tutto ha iniziato a funzionare.

+0

Per me, stavo usando AnyCPU ma non ho controllato a 32 bit. Tuttavia, deve essere impostato su 32 bit. Una volta impostato su x64, è stato quindi possibile caricare la DLL x64 (avevo installato solo Oracle a 64 bit) – jessewolfe

3

Ho ricevuto lo stesso errore all'apertura della pagina tramite IIS, Win7 a 64 bit.

La mia soluzione è:

Vai a IIS manager -> Pool di applicazioni -> Impostazioni avanzate -> Attiva applicazioni a 32 bit.

enter image description here

1

Ecco cosa ha funzionato per me. Il mio server aveva già installato un client Oracle. (Versione 11.2.0)

  • Download dal ODAC for Windows Downloads pagina ODP.NET Managed driver
    (ho scelto il rilascio ottobre 2015, 2.43 MB il download)

  • Estrarre il file zip, afferrare the \ lib \ net40 \ Oracle.ManagedDataAccess.dll e posizionarlo nella cartella bin.

  • Nel web.config, aggiungere un riferimento al driver gestito ODP.NET in system.data \ DbProviderFactories spiegato in this answer.

Questo è tutto.

Per confermare, eseguire questo answer's code per verificare se il provider ODP.NET è installato. Si dovrebbe vedere ODP.NET, Driver gestito nell'elenco.

1

Ho avuto un problema simile. È stato risolto aggiungendo un pacchetto NuGet. Ho già avuto Oracle.ManagedDataAccess.EntityFramework disponibile nei miei riferimenti dall'installazione di ODT ma stava dando un conflitto Entity Framework 5 con 6 nel registro dettagliato. Una volta aggiunto il pacchetto NuGet, tutto ha iniziato a funzionare.

  • Per installare, fare clic destro Riferimenti -> Gestione Pacchetti Nuget ... -> Ricerca per Oracle nella scheda Sfoglia -> Scegli Oracle.ManagedDataAccess.EntityFramework e installare la versione più recente.
Problemi correlati