Frage

Ich habe eine Datenbank in MySQL aufgebaut und ich bin versucht, es mit Entity Framework zu kartieren, aber ich anfangen zu laufen in „GenerateSSDLException“ s, wenn ich versuche, mehr hinzuzufügen als etwa 20 Tabellen zum EF Kontext.

  

Eine Ausnahme vom Typ   'Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine + GenerateSSDLException'   aufgetreten zu aktualisieren versuchen,   aus der Datenbank. Die Ausnahme   Nachricht lautet: ‚Ein Fehler ist aufgetreten, während   Ausführen der Befehlsdefinition. Sehen   die innere Ausnahme für weitere Einzelheiten. "

     

Schwerwiegender Fehler bei der Befehlsausführung aufgetreten.

     

Timeout abgelaufen. Die Timeout-Periode abgelaufen ist vor dem Abschluss des Vorgangs oder der Server nicht reagiert.

Es gibt nichts besonderes über die betroffenen Tabellen, und es ist nie die gleiche Tabelle (n), es ist nur, dass nach einer gewissen (unspezifische) Anzahl der Tabellen hinzugefügt wurden, kann der Kontext nicht mehr aktualisiert werden, ohne dass die „Timeout abgelaufen“ Error. Manchmal ist es nur eine Tabelle übrig, und manchmal ist es drei; Ergebnisse sind ziemlich unberechenbar. Weiterhin zeigt die Varianz in der Anzahl der Tabellen, die vor dem Fehler hinzugefügt werden können, um mich, dass vielleicht das Problem liegt in der Größe der Abfrage, den Kontext zu aktualisieren erzeugt wird, die sowohl die bestehenden Tabellendefinitionen enthält, und auch die neuen Tabellen, dass werden ihm hinzugefügt. Im Wesentlichen wird die SQL-Abfrage zu groß bekommen und es andernfalls aus irgendeinem Grunde auszuführen.

Wenn ich erzeugen, um das Modell mit EdmGen2 es funktioniert ohne Fehler, aber die erzeugte EDMX-Datei nicht innerhalb von Visual Studio aktualisiert werden, ohne dass die oben genannte Ausnahme zu erzeugen.

In aller Wahrscheinlichkeit nach der Quelle dieses Problem liegt in dem Werkzeug in Visual Studio gegeben, dass EdmGen2 funktioniert gut, aber ich bin die Hoffnung, dass vielleicht andere konnten einige Ratschläge geben, wie dieses sehr einzigartiges Problem zu nähern, weil es scheint, wie < a href = "http://forums.mysql.com/read.php?38,285936,285936" rel = "noreferrer"> ich bin nicht die einzige Person, es erleben.

Ein Vorschlag ein Kollege angeboten wurde zwei separate EBMX Dateien mit einiger Tabelle Crossover beibehalten, aber das scheint wie ein ziemlich hässlich fix meiner Meinung nach. Ich nehme an, das ist das, was ich für den Versuch, „neue Technologie“ zu verwenden. : (

War es hilfreich?

Lösung

Ich habe Kopfschmerzen gerade dieses Problem in dem ganzen Nachmittag. Allerdings fand ich die Lösung, dass Sie nur eine Aussage in app.config oder web.config hinzufügen können, wo Ihre EF desinger Verbindung existiert als ‚Standard-Befehl Timeout = 300000;‘. Das Problem ist weg.

Andere Tipps

Die obige Beratung ist nicht korrekt.

Default Command Timeout ist die einzige Verbindung String-Parameter Sie ändern müssen. Connect Time regelt nur die Höhe der Zeit zu warten, um eine Verbindung in erster Linie zu bekommen; Das ist nicht Ihr Problem.

Default Command Timeout erscheint mit Connector / Net 6.3.4 keine Wirkung in der Verbindungszeichenfolge zu haben. Ich denke, dass dies ein Fehler in Connector / Net ist, und ich reichte einen Bug-Report mit Oracle. EDIT: Dieser Fehler wurde von MySQL-Entwickler anerkannt und wird als die 10/13/2010 festgesetzt. Fixes wurden in 6.0.8 setzen, 6.1.6, 6.2.5 und 6.3.5.

Der einzige Weg, ich habe um das war meine ObjectContext Objekts CommandTimeout Eigenschaft auf etwas anderes als null zu ändern. Wenn es null, es sollte den Wert in dem „underlying provider“ pro MSDN verwenden. Wenn nicht null ist, ist es der maßgebliche Wert für die Anzahl der Sekunden, bevor ein Timeout.

Zum Beispiel:

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

Check out:

http: // efvote. wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/

Oops, gerade realisiert, dass dieser Link bereits gebucht wurde! leider

würde ich auch in Erwägung ziehen, „Ein Vorschlag ein Kollege angeboten wurde Beibehaltung von zwei separaten EBMX Dateien mit einiger Tabelle Crossover“

Es kann hässlich sein, aber es sollte funktionieren!

Ihr seid schwach nicht erklären, wie das Problem leicht zu beheben:

  1. Löschen Sie alle Ihre Datenverbindungen
  2. Laden Sie die neueste MySQL Connector (6.3.x)
  3. Öffnen Sie Visual Studio> Sever Explorer> Rechtsklick "Datenverbindungen"> In Verbindung
  4. Wählen Sie MySQL-Datenbankanbieter
  5. Geben Sie Verbindungsdetails
  6. Klicken Sie auf "Erweitert"
  7. Suchen Connect Time out und machen es so etwas wie 30.000
  8. Standardbefehl Timeout finden und es so etwas wie 30.000
  9. machen

Speicher alles und dann versuchen und Ihr EF-Modell erneut zu aktualisieren. Getestet habe ich diese mit EF 4.0 und VS2010, damit ich weiß, es funktioniert.

habe ich versucht, alle der oben genannten Lösung ohne Erfolg. Ich habe den neuesten .NET Connector für MySQL (6.3.6) und das Problem verschwunden.

Versuchen Sie dotConnect für MySQL mit Entity Developer .
Wir haben einige Verbesserungen in dem Modellerzeugungsprozess in unseren Werkzeugen hergestellt. Sie können die Devart Entity Model zu Ihrem Projekt hinzufügen, die das ADO.NET Entity Framework-Modell ähnlich ist, aber einige Verbesserungen haben und haben nicht das Timeout Problem.

Zwei Möglichkeiten in dem Sinne:

Die erste ist, dass es EF-Version 1 (die mit .NET 3.5 SP 1 geliefert). Siehe diese und diese .

Die andere sind, dass das fühlt sich grob wie die gleichen Symptome bekam man mit SQL Server und Pre-ODBC-Treiber (circa 1991), wo die falsche Art von Anruf verwendet wurde: eine Art verwendet, mit Abfragen Ergebnisse (select) zurückkehren, und die andere für Aussagen, nicht ein Ergebnis (create table) zurück. Schließlich wurde die Verbindung hoffnungslos unsynchronisierten versucht SELECT Ergebnisse der entsprechenden Abfrage übereinstimmen. (In jenen Tagen, die Blue Screen Of Death nicht existiert. Der Computer freiwillig statt neu zu starten neigten)

Ich frage mich, ob das Werkzeug den Verbindungsmodus in der Vielzahl von Operationen durchgeführt wird verwirrend: Erstellen von Tabellen, die erstellte Struktur zu überprüfen, das Hinzufügen einer neue Spalte, bevölkert Zeilen und Verifizieren oder auf den Zeileninhalt Validierung nach gefüllt. Wenn dies die Ursache ist, dann könnte es durch seine „reinere“ über die Folge von Operationen vermieden werden: nichts tun, sondern komplette Tabelle erstellt eine nach dem anderen, das heißt, nichts tun, was dazu führen würde es eine Tabelle erstellen dann alter table neu hinzufügen Spalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top