So ändern Sie die Datenbank - Von Entity Framework verwendetes Schema (MySQL-Datenbank)?

c# connection database entity-framework mysql

Frage

Ich verwende EntityFramework in einem Projekt, um eine Verbindung zu einer Mysql-Datenbank herzustellen. Der Anbieter ist Devart Dot.connect.

Diese Anwendung muss über Verbindungsparameter, die vom Benutzer zur Laufzeit angegeben werden, eine Verbindung zu einer Datenbank herstellen. Dies beinhaltet natürlich den Namen der MySQL-Datenbank.

Ich habe die EntityConnectionStringBuiler- und EntityConnection-Klassen verwendet, um die benutzerdefinierten Verbindungsparameter aufzubauen und zu speichern.

Das Problem ist, dass die Anwendung selbst bei solchen Parametern immer eine Verbindung zu der Datenbank herstellt, wenn das EntityModel mit dem Visual Studio-Assistenten entworfen wird. Sehr seltsam ist, dass beim Debuggen und Überprüfen des Status von ObjectContext die benutzerdefinierten Verbindungsparameter korrekt verwendet werden ... Das macht mich verrückt !!!!! Irgendeine Ahnung ?

Akzeptierte Antwort

Nachdem ich einen Tag mit diesem Problem verbracht hatte, wurde mir endlich klar, dass das Problem von der model.edmx-Datei herrührte.

In dieser Datei haben Sie eine Zeile pro EntitySet. Für jedes EntitySet-Element gibt es ein Attribut namens Schema. Im Falle von SQL Server wird dieses Attribut auf das Schema der zugehörigen Tabelle festgelegt:

EntitySet Name = "annee_civile" EntityType = "openemisModel.Store.annee_civile" store: Type = "Tables" Schema = "mydatabase" />

Wenn Sie den Namen des Schemas angeben, wenn Sie EntityConnection besitzen, scheint es einen Konflikt zu geben, und schließlich wird das in der edmx-Datei definierte Schema verwendet, auch wenn Sie in den Verbindungsparametern ein anderes angegeben haben.

Die Lösung besteht einfach darin, den Namen des Schemas in der edmx-Datei zu entfernen. DIESE FUNKTIONIERT FÜR MYSQL, wahrscheinlich nicht, wenn eine Verbindung zu einem SQL-Server hergestellt wird.

EntitySet Name = "annee_civile" EntityType = "openemisModel.Store.annee_civile" store: Type = "Tables" Schema = "" />

Der EntityConnectionStringBuilder:

string providedString = "Benutzer-ID = xxxx; Kennwort = xxx; Host = xxxx; Datenbank = anydatabasename"; EntityConnectionStringBuilder entityConnBuilder = new EntityConnectionStringBuilder (); entityConnBuilder.Provider = "Devart.Data.MySql"; entityConnBuilder.Metadata = @ "res: // /OpenEmisModel.csdl | res:// /OpenEmisModel.ssdl | res://*/OpenEmisModel.msl"; entityConnBuilder.ProviderConnectionString = providedString;

Die EntityConnection und der Objektkontext, der diese verwendet:

EntityConnection entityConnexionEmis = new EntityConnection (entityConnBuilder.ConnectionString);

objectcontextEntities testingContext = neue objectcontextEntities (entityConnexionEmis);

Die Software kann jetzt eine Verbindung zu einem beliebigen Datenbanknamen herstellen.

Hoffe das hilft.


Beliebte Antwort

Verweisen Sie auf die DLL Devart.Data.MySql.Entity.EF6.dll im Projekt.

Fügen Sie beim Start Ihrer Anwendung und vor dem Ausführen von Datenbankoperationen Folgendes hinzu:

var config = MySqlEntityProviderConfig.Instance;
config.Workarounds.IgnoreSchemaName = true;

Sie müssen referenzieren:

using Devart.Data.MySql.Entity.Configuration;


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum