Question

J'utilise entityFramework 4.3 version bêta et son usine de migration de données. J'ai écrit le code suivant pour générer une migration personnalisée et l'appliquer à la base de données.

MigrationScaffolder ms=new MigrationScaffolder(configuration);
ScaffoldedMigration scaffoldedMigration= ms.Scaffold("Migration");

DbMigrator dbMigrator = new DbMigrator(configuration);
dbMigrator.Update(scaffoldedMigration.MigrationId);

La fonction d'échafaudage a bien fonctionné et a généré une migration correctement.

Mais une exception revient et dit

"La migration cible spécifiée '201201230637551_migration' n'existe pas. Assurez-vous que la migration cible se réfère à un identifiant de migration existant."

Est-ce que cela se produit car il s'agit toujours d'une version bêta? Quelqu'un peut-il m'aider à résoudre ce problème.

Merci.

Était-ce utile?

La solution

Ce n'est pas parce que vous utilisiez une version bêta. La classe MigrationsCaffolder est uniquement pour générer une classe de configuration. Ce fichier généré n'est pas ajouté automatiquement à la solution. Si nous voulons le transmettre dans la méthode dbmigrator.update (), nous devons d'abord ajouter le fichier généré dans la solution. Ensuite, nous devons faire une instance de cette classe et la transmettre dans la méthode Update () comme celle-ci.

{
    DbMigrationsConfiguration myConfiguration=new MyConfiguration();
    DbMigrator dbMigrator = new DbMigrator(configuration);
    dbMigrator.Update(myConfiguration);
}

Ici MyConfiguration est la classe générée.

De plus, vous n'avez pas besoin d'appliquer des migrations dans votre projet de cette façon. Au lieu de cela, vous pouvez utiliser:

{
    DbMigrationsConfiguration myConfiguration=new DbMigrationsConfiguration(){
       AutomaticMigrationsEnabled = true;
       AutomaticMigrationDataLossAllowed = true;
    }
    DbMigrator dbMigrator = new DbMigrator(configuration);
    dbMigrator.Update(myConfiguration);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top