2016-11-19 7 views
1

Ich verwende zuerst eine Oracle DB mit EF 6 Code. Und hat benutzerdefinierte Verschlüsselung für Verbindungszeichenfolge. Verbindungszeichenfolge speichert in separaten Konfigurationsdatei "connstring.config": Es gibt eine klare Verbindung String ohne VerschlüsselungEntity Framework und Verbindungszeichenfolge mit benutzerdefinierter Verschlüsselung

<?xml version="1.0" encoding="utf-8" ?> 
<connectionStrings> 
    <add name="MyConnString" connectionString="Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True;" 
    providerName="Oracle.ManagedDataAccess.Client" /> 
</connectionStrings> 

Datenquellen in web.config-Datei.

MyDbcontext:

public static string GetConnectionString() 
{ 
    string encodedConnStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString.ToString(); 
    string result = Crypto.Decrypt(encodedConnStr); 
    return result; 
} 
public MyDbContext() : base(GetConnectionString()){} 

Und wenn ich Anwendung ausführen ich erhalte Server-Fehler: Unable Vorgang abzuschließen. Die angegebene SqlConnection gibt keinen anfänglichen Katalog oder AttachDBFileName an.

Wie kann ich das lösen?

+0

Debug Ihre App: richtig entschlüsselt Ihre Verbindungszeichenfolge zu werden? Funktioniert der Connectino String selbst? Führen Sie eine Websuche in der Fehlermeldung aus. – Igor

+0

Ja, Entschlüsselung funktioniert korrekt. Ich habe versucht, Verbindungszeichenfolge direkt in der Basis zu tippen, dasselbe – Drake

+0

Ergebnis gibt korrekte Verbindungszeichenfolge zurück. Fehler wird angezeigt, wenn ich DbContext aufruft – Drake

Antwort

1

Da Sie die Verbindungszeichenfolge direkt an den DbContext-Konstruktor übergeben, müssen Sie einen Datenbankprovider bereitstellen, andernfalls weiß er nicht, für welchen Datenbanktyp Verbindungen erstellt werden. Am einfachsten ist es, die Verbindungszeichenfolge zu ändern. Sie können dies nach der Verschlüsselung in Ihrer statischen Methode oder in Ihrer verschlüsselten Verbindungszeichenfolge tun. Basierend auf Ihrer Verbindung oben glaube ich oracle.manageddataaccess.client ist der richtige Anbieter, aber testen Sie es und sehen Sie.

Provider=oracle.manageddataaccess.client;Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True 

Sie können auch etwas versuchen, nach dieser anderen Antwort fand ich auf SO: How to set manually an Oracle Connection String in a DbContext

class MyDbContext: DbContext 
{ 
    public MyDbContext() : base(new OracleConnection(GetConnectionString()){} 
    ... 
} 

Wenn Sie immer noch Probleme auftreten Ihre Frage nur mit den relevanten Teilen aktualisieren : dass Sie eine Instanz DbContext nicht instanziieren können, wenn Sie manuell eine Verbindungszeichenfolge angeben. Wie es jetzt geschrieben ist, ist es sehr einfach, die Annahme zu treffen, dass Ihr Problem bei der Verschlüsselung/Entschlüsselung lag, aber diese sind für das eigentliche Problem irrelevant.

1

Es wurde defaultConnectionFactory indem zu

gelöst
Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework 
Verwandte Themen