156 votes

Débogage de code-première Entité Cadre de la migration des codes

Je suis en utilisant Entity Framework code first dans mon site web et je me demandais simplement si il n'y a aucune façon de déboguer la migration des codes. Vous savez, comme la définition de points d'arrêt et des trucs comme ça.

Je suis l'aide de la Console du Gestionnaire de Package de mise à jour de la base de données à l'aide de la mise à jour de la base de données.

Merci

277voto

m_david Points 645

Je sais que EF Code Premières Migrations est outil relativement nouveau, mais n'oubliez pas que vous êtes encore dans .NET.

De sorte que vous pouvez utiliser:

if (System.Diagnostics.Debugger.IsAttached == false)
  System.Diagnostics.Debugger.Launch();

Après cela, vous pouvez voir votre InnerException.

Ou vous pouvez utiliser try...catch déclaration comme ceci: La gestion des exceptions Entity Framework

12voto

robasaurus Points 439

Pour frapper un point de rupture dans un db migration de définir le contexte de MigrateDatabaseToLatestVersion sur initialiser.

Database.SetInitializer(new MigrateDatabaseToLatestVersion<EnterContextHere, Configuration>());

Alors que vous venez de debug comme normale (exécuter à l'aide de la touche f5) et le point d'arrêt sera frappé la première fois que vous exécutez le projet.

Le problème maintenant est que si vous déboguez un deuxième temps, la migration ne sera pas exécuté. C'est parce que l' __MigrationHistory tableau a été mis à jour pour dire que vous avez migré vers la dernière version. Pour re-tester la migration ouvrir le gestionnaire de paquets de la console et revenir à la précédente migration:

Update-Database –TargetMigration: ThePreviousMigrationName

9voto

Rui Lima Points 1299

Ma réponse risque d'être un peu idiot, mais de toute façon ici il va. Si vous, comme moi, quelques fois d'avoir des problèmes dans la Graine() la méthode que j'ai l'habitude de faire est simplement de créer une méthode publique qui appelle le Protéger de la Graine().

public void SeedDebug(AppDbContext context)
{
    Seed(context);
}

ensuite dans mon contrôleur HomeController j'ai appeler cette méthode dans le mode de Débogage.

public class HomeController : Controller
{
    var appDb = new AppDbContext();
    public ActionResult Index()
    {
        var config = new Configuration();
        config.SeedDebug(appDb);
        return View();
    }
}

Je sais que c'est un peu boiteux solution, mais elle est simple et rapide. Bien sûr, cela doit être fait après que le modèle a été créé. Donc, étape par étape:

  1. commentaire de la graine de méthode et d'exécuter la mise à jour de la base de données pour créer le modèle
  2. décommentez la méthode de Semences() et plugin le "hack" je l'ai mentionné ci-dessus.

  3. dans la configuration de désactiver l'Auto migrations

    AutomaticMigrationsEnabled = false;//si vous avez déjà désactivé sauter cette étape

  4. Le débogage de votre application, la correction de l'erreur et de supprimer le "hack"

4voto

Tom Ferguson Points 329

Vous pouvez ajouter de la Console.WriteLine des déclarations à la migration de code (pas une bonne solution)

Remarque, les messages sont affichés uniquement si vous exécutez le code de migration à l'aide de la migrate.exe utilitaire (en pacakges\EntityFramework.x.y.z\tools). Ils ne s'affichera pas si vous exécutez la migration via le Gestionnaire de paquets de la console.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X