Comment faire pour exécuter des Semences() la méthode de Configuration de la classe des migrations
J'ai 2 questions:
1) Comment puis-je exécuter des Semences() la méthode de package-manager console sans la mise à jour de la base de données de modèle?
2) Est-il un moyen d'appel de Semences() dans le code?
Merci pour tous les conseils.
- J'ai rencontré ce problème avec EF6 et alors réalisé que j'avais le mal de Projet par Défaut choisis, de sorte que la mise à jour de la base de données n'a pas trouvé une configuration à exécuter. Il est bon de noter que le simple fait de faire une mise à jour de la base de données dans EF6 toujours exécuter la Graine() la méthode. Je ne sais pas si cela était vrai à l'époque, c'était écrit.
Vous devez vous connecter pour publier un commentaire.
Répondre à votre première question. Créer une Migration en cours d'exécution ajoutez-la migration SeedOnly
Effacer tous Up() et Down() code généré s'il y a des modifications en attente
Alors vous pouvez Cibler une Migration Spécifique en cours d'exécution mise à jour de la base de données -TargetMigration SeedOnly dans le Gestionnaire de paquets de la console
Après recherche j'ai enfin trouvé la solution pour ce problème:
1) Faire
Configuration
public:2) Ajouter le code ci-dessous n'importe où. Il se déroulera le dernier de la migration et de mise à jour de votre base de données:
Répondre à la Question #2: Extraire tout le code de la Graine() la méthode d'une autre classe. Appelez ensuite qu'à partir de l'intérieur de la Graine() la méthode de la classe de Configuration:
Vous pouvez ensuite appeler à partir de n'importe où:
Répondre à la question 1:
Gens seraient généralement contourner ce soit par:
référence: http://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/
Ce n'est pas exactement ce que vous cherchez, mais cependant prendre un coup d'oeil: L'exécution de l'Entité Cadre des Migrations via l'invite de ligne de commande
Cela peut vous aider ou aider quelqu'un à oublier application de base de données pour la migration, parce que vous pouvez facilement faire des scripts pour exécuter automatiquement...
Ajouter une nouvelle méthode publique dans le
Configuration
classe. La nouvelle méthode appelle la méthode protégéeSeed
:Puis d'appeler la nouvelle méthode de eg. un test unitaire:
Si vous utilisez contexte initiliazer comme MigrateDatabaseToLatestVersion, graines méthode de configuration doit s'exécuter automatiquement. Ne pensez pas que vous devez l'appeler manuellement.
Je sais que c'est une très vieille question, mais au cas où quelqu'un frappe ici et pour le partage d'informations:
Pour moi, la façon la plus simple de répondre à la question 1, serait la résolution de la question 2 en premier, puis utiliser le résultat pour résoudre le premier. Et ce serait quelque chose d'aussi simple que @leifbattermann répondu ci-dessus (https://stackoverflow.com/a/24413407/2996749) ou @Martin Staufcik méthode de trop, et puis il suffit d'appeler la fonction/méthode dans un morceau de code que vous pouvez exécuter chaque fois que vous le voulez, avec l'incroyable avantage qu'il peut être utilisé pour définir les valeurs par défaut dans certains scénarios, comme la création de nouvelles bases de données pour les nouveaux clients, parmi d'autres.
Il suffit de ne pas oublier, si vous utilisez @leifbattermann de la méthode et de l'appel de la fonction à partir d'un autre endroit que la Configuration de la classe et la création d'une nouvelle DbContext, vous devez appeler SaveChanges() après. Au moins pour moi, c'était de cette façon.
Juste une chose: si vous n'avez pas l'attente de migrations et de l'envie de semences, juste à l'exécution de la commande "mise à jour de la base de données" dans le Gestionnaire de paquets de la Console, va faire le travail.
Si vous voulez
Update-Database --Target-Migration xxx
et vous êtes surpris comme je l'ai été queseed()
méthode n'a pas été exécuté, vous pouvez essayer degit stash
toutes vos modifications, de générer la base de données de la version précédente à l'aide deUpdate-Database
(à la dernière révision qui s'exécuteseed()
toujours) etgit stash apply
ensuite.Il est laid solution de contournement, mais il m'a aidé.
Btw: n'oubliez pas de mettre en scène vos modifications avant de les accrocher