Je voulais déboguer la Seed()
méthode dans ma classe de configuration de base de données Entity Framework lorsque j'exécute à Update-Database
partir de la console du gestionnaire de package, mais je ne savais pas comment le faire. Je voulais partager la solution avec d'autres au cas où ils auraient le même problème.
entity-framework-5
Sachin Kainth
la source
la source
migrate.exe
depuis la console pour attacher le studio visuel en cours d'exécution. MOre info dans cette réponse: stackoverflow.com/a/52700520/350384La façon dont j'ai résolu ce problème était d'ouvrir une nouvelle instance de Visual Studio, puis d'ouvrir la même solution dans cette nouvelle instance de Visual Studio. J'ai ensuite attaché le débogueur de cette nouvelle instance à l'ancienne instance (devenv.exe) tout en exécutant la commande update-database. Cela m'a permis de déboguer la méthode Seed.
Juste pour m'assurer de ne pas manquer le point d'arrêt en ne me fixant pas à temps, j'ai ajouté un Thread.Sleep avant le point d'arrêt.
J'espère que ça aidera quelqu'un.
la source
Si vous avez besoin d'obtenir la valeur d'une variable spécifique, un hack rapide consiste à lancer une exception:
la source
Une solution plus propre (je suppose que cela nécessite EF 6) serait à mon humble avis d'appeler update-database à partir du code:
Cela vous permet de déboguer la méthode Seed.
Vous pouvez aller plus loin et construire un test unitaire (ou, plus précisément, un test d'intégration) qui crée une base de données de test vide, applique toutes les migrations EF, exécute la méthode Seed et supprime à nouveau la base de données de test:
Mais veillez à ne pas l'exécuter sur votre base de données de développement!
la source
Je sais que c'est une vieille question, mais si tout ce que vous voulez, ce sont des messages, et que vous ne vous souciez pas d'inclure des références à WinForms dans votre projet, j'ai créé une fenêtre de débogage simple où je peux envoyer des événements Trace.
Pour un débogage plus sérieux et étape par étape, j'ouvrirai une autre instance de Visual Studio, mais ce n'est pas nécessaire pour des choses simples.
Voici tout le code:
SeedApplicationContext.cs
Et sur votre configuration standard.cs
la source
SeedInternal
méthode puisse l'utiliser)Le débogage est une chose mais n'oubliez pas d'appeler: context.Update ()
N'enveloppez pas non plus try catch sans que de bonnes exceptions internes ne se répandent sur la console.
https://coderwall.com/p/fbcyaw/debug-into-entity-framework-code-first avec catch (DbEntityValidationException ex)
la source
J'ai 2 solutions de contournement (sans
Debugger.Launch()
car cela ne fonctionne pas pour moi):Pour imprimer le message dans la console du gestionnaire de package, utilisez l'exception:
throw new Exception("Your message");
Une autre façon consiste à imprimer le message dans le fichier en créant un
cmd
processus:la source