2012-08-07 16 views
15

Wenn Sie das Objektkontext-Datenmodell (mit EDMX-Datei) verwenden, möchten Sie möglicherweise während der Erstellung die Verbindungszeichenfolge in Ihrer Konfigurationsdatei angeben.Provider-Verbindungszeichenfolge von Entity Framework

Die Verbindungszeichenfolge ist leider nicht die allgemeine Verbindungszeichenfolge, da sie einige Dinge enthält, die für die Entitätsverbindungen benötigt werden. Beispiel mit MySql Verbindung:

<add name="MyDbEntities" connectionString="metadata=res://*/Namespace.MyDb.csdl|res://*/Namespace.MyDb.ssdl|res://*/Namespace.MyDb.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=172.17.17.154;User Id=user;password=password;Persist Security Info=True;database=MyDatabase;Convert Zero Datetime=true&quot;" providerName="System.Data.EntityClient" /> 

Das Problem, das ich ist haben, dass diese Verbindungszeichenfolge der Verbindungszeichenfolge des Anbieters in der Parameter „Provider Verbindungszeichenfolge“ enthält.

Aus einem bestimmten Grund muss ich eine neue MySqlConnection erstellen, die nicht mit dem Entitätsmodell verknüpft ist. Zum Erstellen der MySqlConnection muss ich die mysql-Verbindungszeichenfolge angeben - das ist die Providerverbindungszeichenfolge für das Entitätsmodell, und ich weiß, dass die Verbindungszeichenfolge, die ich brauche, immer dieselbe Verbindungszeichenfolge für das Entitätsmodell ist.

Aber wie bekomme ich die Provider Verbindungszeichenfolge programmatisch? Ich war mit Surfen im Modellinstanz ohne Erfolg stecken ...

Die folgende:

ModelInstance.Connection.ConnectionString 

enthält so etwas wie „name = TestBotEntities“, nicht einmal die ganze Verbindungszeichenfolge. Also habe ich versucht:

ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString 

aber, dass man enthält die gesamte Verbindungszeichenfolge Einheit und ich weiß einfach nicht, wie es zu analysieren, wie nur die Provider Verbindungszeichenfolge von ihm zu bekommen.

Antwort

33

Es gibt zwei Möglichkeiten.

ich die Einheit Verbindungszeichenfolge über die EntityConnectionStringBuilder analysieren konnte:

string entityConnectionString = ConfigurationManager.ConnectionStrings["MyDbEntities"].ConnectionString; 
string providerConnectionString = new EntityConnectionStringBuilder(entityConnectionString).ProviderConnectionString; 

... oder wenn ich die spezifische Modellinstanz zur Verfügung haben, kann ich es von hier.

((System.Data.EntityClient.EntityConnection)ModelInstance.Connection).StoreConnection.ConnectionString;