Entity Framework mit MySQL - Zeitüberschreitung beim Generieren des Modells

edmgen entity-framework mysql

Frage

Ich habe in MySQL eine Datenbank erstellt und versuche, sie mit Entity Framework abzubilden, aber ich fange immer wieder an "GenerateSSDLException", wenn ich versuche, dem EF-Kontext mehr als 20 Tabellen hinzuzufügen.

Eine Ausnahme des Typs 'Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine + GenerateSSDLException' trat beim Versuch des Updates aus der Datenbank auf. Die Ausnahmemeldung lautet: 'Bei der Ausführung der Befehlsdefinition ist ein Fehler aufgetreten. Details finden Sie in der inneren Ausnahme. '

Schwerwiegender Fehler während der Befehlsausführung.

Zeitüberschreitung. Das Zeitlimit, das vor Abschluss des Vorgangs verstrichen ist oder der Server antwortet nicht.

Es gibt nichts Besonderes an den betroffenen Tabellen, und es sind niemals dieselben Tabellen. Es ist nur so, dass der Kontext nach dem Hinzufügen einer bestimmten (unspezifischen) Anzahl von Tabellen nicht mehr ohne den Fehler "Timeout abgelaufen" aktualisiert werden kann. Manchmal ist nur noch ein Tisch übrig, und manchmal sind es drei; Ergebnisse sind ziemlich unvorhersehbar. Die Abweichung in der Anzahl der Tabellen, die vor dem Fehler hinzugefügt werden können, zeigt außerdem an, dass das Problem möglicherweise in der Größe der Abfrage liegt, die zum Aktualisieren des Kontexts generiert wird, der sowohl die vorhandenen Tabellendefinitionen als auch die neuen Tabellen enthält werden hinzugefügt. Im Wesentlichen wird die SQL-Abfrage zu umfangreich und kann aus irgendeinem Grund nicht ausgeführt werden.

Wenn ich das Modell mit EdmGen2 generiere, funktioniert es fehlerfrei. Die generierte EDMX-Datei kann jedoch nicht in Visual Studio aktualisiert werden, ohne die oben erwähnte Ausnahme zu erzeugen.

Aller Wahrscheinlichkeit nach liegt die Ursache dieses Problems in dem Tool in Visual Studio, da EdmGen2 einwandfrei funktioniert. Ich hoffe jedoch, dass andere möglicherweise Ratschläge geben könnten, wie man dieses sehr einzigartige Problem angehen kann, weil es so scheint, als ob ich es nicht bin die einzige Person, die es erlebt .

Ein Vorschlag, den ein Kollege anbot, bestand darin, zwei separate EBMX-Dateien mit einigen Tabellenübergängen zu verwalten, aber das scheint meiner Meinung nach eine ziemlich hässliche Lösung zu sein. Ich denke, das ist es, was ich bekomme, wenn ich versuche, "neue Technologie" einzusetzen. :(

Akzeptierte Antwort

Ich hatte am ganzen Nachmittag Kopfschmerzen bei diesem Problem. Ich fand jedoch die Lösung, dass Sie einfach eine Anweisung in app.config oder web.config hinzufügen können, in der Ihre EF-Desinger-Verbindung als 'Default Command Timeout = 300000;' Das Problem ist weg.


Beliebte Antwort

Der oben genannte Hinweis ist nicht korrekt.

Default Command Timeout ist der einzige Parameter für die Verbindungszeichenfolge, den Sie ändern müssen. Connect Time regelt lediglich die Wartezeit, um eine Verbindung überhaupt zu erhalten. das ist nicht dein problem.

Default Command Timeout scheint in der Verbindungszeichenfolge mit Connector / Net 6.3.4 keine Auswirkung zu haben. Ich denke, das ist ein Fehler in Connector / Net, und ich habe einen Fehlerbericht bei Oracle eingereicht. BEARBEITEN: Dieser Fehler wurde von MySQL-Entwicklern bestätigt und wurde am 13.10.2010 behoben. Fixes wurden in 6.0.8, 6.1.6, 6.2.5 und 6.3.5 eingefügt.

Die einzige Möglichkeit, dies zu ObjectContext , bestand darin, die CommandTimeout Eigenschaft meines ObjectContext Objekts auf einen anderen CommandTimeout als null zu ändern. Wenn es null ist, sollte es den Wert im "zugrunde liegenden Provider" pro MSDN verwenden. Wenn nicht Null, ist dies der maßgebliche Wert für die Anzahl der Sekunden vor einem Timeout.

Zum Beispiel:

var context = new CitationData.de_rawEntities();
context.CommandTimeout = 180;


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