Ich wollte die Seed()
Methode in meiner Entity Framework-Datenbankkonfigurationsklasse debuggen, als ich sie Update-Database
über die Package Manager-Konsole ausführte, wusste aber nicht, wie das geht. Ich wollte die Lösung mit anderen teilen, falls sie das gleiche Problem haben.
entity-framework-5
Sachin Kainth
quelle
quelle
migrate.exe
von der Konsole aus anrufen , um das aktuell ausgeführte Visual Studio anzuhängen. Weitere Informationen in dieser Antwort: stackoverflow.com/a/52700520/350384Die Lösung bestand darin, eine neue Instanz von Visual Studio zu öffnen und dann dieselbe Lösung in dieser neuen Instanz von Visual Studio zu öffnen. Ich habe dann den Debugger in dieser neuen Instanz an die alte Instanz (devenv.exe) angehängt, während ich den Befehl update-database ausgeführt habe. Dadurch konnte ich die Seed-Methode debuggen.
Um sicherzustellen, dass ich den Haltepunkt nicht verpasst habe, indem ich ihn nicht rechtzeitig angehängt habe, habe ich vor dem Haltepunkt einen Thread.Sleep hinzugefügt.
Ich hoffe das hilft jemandem.
quelle
Wenn Sie den Wert einer bestimmten Variablen abrufen müssen, können Sie schnell eine Ausnahme auslösen:
quelle
Eine sauberere Lösung (ich denke, dies erfordert EF 6) wäre meiner Meinung nach, die Update-Datenbank aus dem Code aufzurufen:
Auf diese Weise können Sie die Seed-Methode debuggen.
Sie können noch einen Schritt weiter gehen und einen Komponententest (oder genauer einen Integrationstest) erstellen, der eine leere Testdatenbank erstellt, alle EF-Migrationen anwendet, die Seed-Methode ausführt und die Testdatenbank erneut löscht:
Aber achten Sie darauf, dies nicht gegen Ihre Entwicklungsdatenbank auszuführen!
quelle
Ich weiß, dass dies eine alte Frage ist, aber wenn Sie nur Nachrichten wünschen und keine Verweise auf WinForms in Ihr Projekt aufnehmen möchten, habe ich ein einfaches Debug-Fenster erstellt, in dem ich Trace-Ereignisse senden kann.
Für ein ernsthafteres und schrittweises Debuggen öffne ich eine weitere Visual Studio-Instanz, die jedoch für einfache Aufgaben nicht erforderlich ist.
Das ist der ganze Code:
SeedApplicationContext.cs
Und auf Ihrer Standard Configuration.cs
quelle
SeedInternal
Methode es verwenden kann)Äh Debugging ist eine Sache, aber vergessen Sie nicht aufzurufen: context.Update ()
Wickeln Sie sich auch nicht in Try Catch ein, ohne dass gute innere Ausnahmen auf die Konsole gelangen.
https://coderwall.com/p/fbcyaw/debug-into-entity-framework-code-first with catch (DbEntityValidationException ex)
quelle
Ich habe 2 Problemumgehungen (ohne,
Debugger.Launch()
da es bei mir nicht funktioniert):Verwenden Sie eine Ausnahme, um Nachrichten in der Package Manager-Konsole zu drucken:
throw new Exception("Your message");
Eine andere Möglichkeit besteht darin, eine Nachricht in einer Datei zu drucken, indem Sie einen
cmd
Prozess erstellen :quelle