Chciałem debugować Seed()
metodę w mojej klasie konfiguracji bazy danych Entity Framework, gdy uruchamiam Update-Database
z konsoli Menedżera pakietów, ale nie wiedziałem, jak to zrobić. Chciałem podzielić się rozwiązaniem z innymi na wypadek, gdyby mieli ten sam problem.
entity-framework-5
Sachin Kainth
źródło
źródło
migrate.exe
z konsoli, aby podłączyć aktualnie działające oprogramowanie Visual Studio. Więcej informacji w tej odpowiedzi: stackoverflow.com/a/52700520/350384Sposób, w jaki to rozwiązałem, polegał na otwarciu nowego wystąpienia programu Visual Studio, a następnie otwarciu tego samego rozwiązania w tym nowym wystąpieniu programu Visual Studio. Następnie podłączyłem debuger w tej nowej instancji do starej instancji (devenv.exe) podczas uruchamiania polecenia update-database. To pozwoliło mi debugować metodę Seed.
Aby upewnić się, że nie przegapiłem punktu przerwania, nie dołączając go na czas, dodałem Thread.Sleep przed punktem przerwania.
Mam nadzieję, że to komuś pomoże.
źródło
Jeśli chcesz uzyskać wartość określonej zmiennej, szybkim hackem jest rzucenie wyjątku:
źródło
Czystszym rozwiązaniem (myślę, że wymaga to EF 6) byłoby IMHO wywołanie update-database z kodu:
Pozwala to na debugowanie metody Seed.
Możesz pójść o krok dalej i skonstruować test jednostkowy (lub dokładniej test integracji), który tworzy pustą testową bazę danych, stosuje wszystkie migracje EF, uruchamia metodę Seed i ponownie upuszcza testową bazę danych:
Ale uważaj, aby nie uruchamiać tego w swojej programistycznej bazie danych!
źródło
Wiem, że to stare pytanie, ale jeśli chcesz tylko wiadomości i nie zależy ci na umieszczaniu w projekcie odniesień do WinForms, stworzyłem proste okno debugowania, w którym mogę wysyłać zdarzenia Trace.
W celu bardziej poważnego debugowania krok po kroku otworzę inną instancję programu Visual Studio, ale nie jest to konieczne w przypadku prostych rzeczy.
Oto cały kod:
SeedApplicationContext.cs
Oraz w standardowym pliku Configuration.cs
źródło
SeedInternal
metoda mogła go użyć)Uh Debugowanie to jedno, ale nie zapomnij wywołać: context.Update ()
Nie zawijaj też prób łapania bez dobrych wewnętrznych wyjątków przedostających się do konsoli.
https://coderwall.com/p/fbcyaw/debug-into-entity-framework-code-first with catch (DbEntityValidationException ex)
źródło
Mam 2 obejścia (bez,
Debugger.Launch()
ponieważ to nie działa dla mnie):Aby wydrukować wiadomość w konsoli Menedżera pakietów, użyj wyjątku:
throw new Exception("Your message");
Innym sposobem jest wydrukowanie wiadomości w pliku poprzez utworzenie
cmd
procesu:źródło