2012-11-14 6 views
1

Maintenant, je suis en utilisant EF6 Alpha, et la migration lors de l'utilisation, il ajoutera un nouveau journal de migration dans la table __MigrationHistory.Entity Framework 6 Code Première de contextKey de migration

En EF6, Le tableau __MigrationHistory a une nouvelle colonne appelée "contextKey". Après le test, j'ai trouvé il y a deux valeur par défaut « de contextKey »:

  1. Le nom complet des class.This dérivés de DbContext se produit quand je lance le code:

    Database.CreateIfNotExists(); 
    
  2. Le nom complet de DbMigrationsConfiguration de Classe dérivée. Cela se produit lorsque je lance le code:

    public ArticleDbContext() 
    { 
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ArticleDbContext, ArticleConfiguration>()); 
    } 
    

La première fois que je lance l'application, "Database.CreateIfNotExists();" créez une nouvelle base de données pour moi, également toutes les tables qui correspondent aux modèles définis dans ArticleDbContext, puis ajoutez une ligne __MigrationHistory dont la valeur de ContextKey est "Module.Article.Model.ArticleDbContext".

Et puis "Database.SetInitializer (nouveau MigrateDatabaseToLatestVersion());" sera généré, ce code générera une nouvelle ContextKey "PowerEasy.Module.Article.Migrations.ArticleConfiguration". La migration interroge la table __MigrationHistory avec cette ContextKey et découvre qu'il n'y a pas de données. Donc, encore une fois, il va créer toutes les tables qui correspondent aux modèles définis dans ArticleDbContext, mais les tables existent déjà dans la base de données, donc une exception sera lancée, et dites-moi "la table XXX existe déjà".

Comment puis-je résoudre ce problème?

Répondre

5

Vous ne devriez pas mélanger la méthode et les migrations de Database.CreateIfNotExists (ou l'un des initialiseurs construit au-dessus de celui-ci). Les migrations prendront soin de créer la base de données si elle n'existe pas déjà.

Comme alternative à l'initialiseur Migrations, vous pouvez également appliquer des migrations en utilisant la méthode DbMigrator.Update. Ceci est utile si vous voulez créer/mettre à jour la base de données avant qu'elle ne soit déclenchée par l'initialiseur.

+0

Merci beaucoup, je l'ai résolu. – RongieZeng

Questions connexes