appena trovato la soluzione dopo aver lottato con questo per tutto il pomeriggio. Sembra che la funzione di costruzione o DbContext utilizzi la stringa di connessione o il nome della stringa di connessione, che non è la stessa, se si passa una stringa di connessione verrà automaticamente impostato su SqlClient, che è l'unica cosa raggruppata per impostazione predefinita in .NET
Ora , se tu, invece di usare l'intera stringa di connessione, passi solo il nome della stringa di connessione, allora analizzerà internamente anche il parametro "providerName" che ha il nome assembly per il provider DB Oracle.DataAccess.Client, per esempio.
Così, invece di passare la stringa di connessione al costruttore DbContext solo passare il nome della stringa di connessione, in questo modo:
file .config:
<connectionStrings>
<add name="SQLServer" connectionString="Server=localhost; Database=MyDb; User ID=MyUser;Password=MyPwd;Pooling=false" providerName="System.Data.SqlClient" />
<add name="Oracle" connectionString="Data Source=localhost:1521/XE;Persist Security Info=True;User ID=MyUser;Password=MyPwd;" providerName="Oracle.ManagedDataAccess.Client"/>
</connectionStrings>
<appSettings>
<add key="DefaultConnection" value="Oracle" />
</appSettings>
E nel tuo DbContext:
public MyDbContext()
: base("DefaultConnection")
{
}
In questo modo è sufficiente impostare una chiave di configurazione con la n ame della stringa di connessione che vuoi collegare al contesto e usarla nel costruttore. Se lo fai in questo modo, EF analizzerà automaticamente l'intero tag della stringa di connessione e non solo il valore dell'attributo connectionString, quindi, carica il provider corretto.
Si noti che sto utilizzando Oracle.ManagedDataAccess.Client che è più recente e solo incluso in ODAC/ODP.NET v12 e versioni successive. Se si utilizza ODAC 11, è necessario utilizzare Oracle.DataAccess.Client in providerName.
fonte
2013-09-10 03:50:05
prova ad aggiungere "provider = System.Data.OracleClient" nella tua connessioneString –
@MaxZerbini che ho provato, non ha funzionato. –