J'utilise d'abord le code Entity Framework sur mon site Web et je me demande simplement s'il existe un moyen de déboguer les codes de migration. Vous savez, comme définir des points d'arrêt et des trucs comme ça.
J'utilise la console du gestionnaire de package pour mettre à jour la base de données en utilisant Update-Database
.
Merci
Réponses:
Je sais que EF Code First Migrations est un outil relativement nouveau, mais n'oubliez pas que vous êtes toujours dans .NET.
Vous pouvez donc utiliser:
Après cela, vous pouvez voir votre InnerException.
Ou vous pouvez utiliser l'instruction try ... catch comme ceci: Gestion des exceptions Entity Framework
la source
Pour atteindre un point d'arrêt dans une migration de base de données, définissez le contexte sur MigrateDatabaseToLatestVersion lors de l'initialisation.
Ensuite, vous déboguez simplement comme d'habitude (exécutez en utilisant f5) et le point d'arrêt atteindra la première fois que vous exécuterez le projet.
Le problème maintenant est que si vous déboguez une deuxième fois, la migration ne s'exécutera pas. En effet, la table __MigrationHistory a été mise à jour pour indiquer que vous avez migré vers la dernière version. Pour retester la migration, ouvrez la console du gestionnaire de packages et rétrogradez à la migration précédente:
la source
Ma réponse est peut-être un peu idiote, mais de toute façon, la voici. Si, comme moi, vous rencontrez parfois des problèmes avec la méthode Seed (), ce que je fais habituellement est simplement de créer une méthode publique qui appelle Protect Seed ().
puis dans mon HomeController j'appelle cette méthode en mode Debug.
Je sais que c'est une solution un peu boiteuse, mais c'est simple et rapide. Bien sûr, cela doit être fait après la création du modèle. Donc étape par étape:
décommentez la méthode Seed () et le plugin "hack" que j'ai mentionné plus haut.
dans la configuration désactiver les migrations automatiques
AutomaticMigrationsEnabled = false; // si vous avez déjà désactivé cette étape, sautez cette étape
Déboguez votre application, corrigez l'erreur et supprimez le "hack"
la source
Voici une méthode plus infaillible qui fera l'affaire sans trop d'histoires:
Étape # 1: placez ce morceau de code juste au-dessus de la migration que vous souhaitez déboguer:
Étape # 2: compilez le projet contenant vos migrations
Étape # 3: Ouvrez une console dans le répertoire de sortie (/ bin / Debug, / bin / Release etc) contenant la dll de vos migrations
Étape # 4: Appelez migrate.exe avec le paramètre / scriptFile pour lancer le débogueur et déboguer réellement la migration de base de données souhaitée
Une fois que la boîte de dialogue de sélection du débogueur apparaît, choisissez l'instance de Visual Studio que vous avez déjà ouverte.
la source
Vous pouvez ajouter des instructions Console.WriteLine au code de migration (ce n'est pas une excellente solution)
Notez que les messages ne s'affichent que si vous exécutez le code de migration à l'aide de l'
migrate.exe
utilitaire (inpacakges\EntityFramework.x.y.z\tools
). Ils ne s'afficheront pas si vous exécutez la migration via la console du gestionnaire de package.la source
J'ai eu beaucoup de chance en utilisant "Debugger.Launch ()" (comme dans la réponse de m_david ci-dessus ) ailleurs, mais à l'intérieur de CreateDbContext, il semble à la fois attacher et non attacher. Ce que je veux dire, c'est qu'il s'attache et commence à essayer d'entrer dans les fichiers .asm et .cpp (code interne). Si j'essaye de placer un point d'arrêt sur un Console.Writeline que JE SAIS est exécuté après (je peux voir la sortie de N'IMPORTE QUELLE "COMMANDE de migrations de dotnet ef") il l'exécute et ne frappe jamais le point d'arrêt.
C'est ce qui a fonctionné pour moi à la place:
Vous pouvez exécuter la migration et l'attacher manuellement à l'aide de Visual Studio et cela vous permettra en fait de parcourir le code comme prévu, c'est juste plus pénible. Ce que je devrais vraiment essayer, c'est la combinaison des deux méthodes ...
la source
J'ai également trouvé une astuce intéressante ici pour obtenir les détails de l'erreur ...
Fondamentalement, l'astuce consiste à récupérer toutes les informations d'une exception, à les mettre dans une chaîne et à lancer une nouvelle exception DbEntityValidationException avec la chaîne générée et l'exception d'origine.
la source