Question Comment utiliser les migrations sur une base de données existante en production créée avec Entity Framework 4.1?


J'ai un système en production qui a été créé avec Entity Framework 4.1 Code First. Maintenant, j'ai effectué la mise à niveau vers 4.3 et j'ai besoin d'appliquer des migrations, mais il y a plusieurs cas d'utilisation que je dois couvrir:

  1. Un nouveau développeur a besoin de la base de données créée à partir de zéro avec des données de départ. (Le Seed() méthode applique également des indices uniques.)
  2. L'environnement de production n'a besoin que des modifications non appliquées appliquées. (Mais gardez à l'esprit que cette base de données a été créée dans EF 4.1, qui n'a pas de migrations.)

Comment créer les migrations et un initialiseur (ou des initialiseurs) pour couvrir ces deux cas?


12
2018-05-15 14:14


origine


Réponses:


Comme votre base de données de production a été créée avec EF 4.1, vous devrez faire un peu de travail pour la préparer à l’utilisation avec Migrations. Commencez avec une copie de votre code de production en cours dans un environnement de développement. Assurez-vous que la base de données de développement n'existe pas.

  1. Mettez à niveau le projet pour utiliser EF 4.3 (ou une version ultérieure) avec Migrations et créez la migration initiale vers la capture instantanée à laquelle ressemble la production.

    Update-Package EntityFramework
    Enable-Migrations
    Add-Migration InitialCreate  
    
  2. Remplacez vos initialiseurs de base de données par du code Migrations correspondant.

    Pour les données sur les semences, ajoutez-les à la Seed() méthode de la Migrations\Configuration.cs fichier. Notez que contrairement au Seed() méthode dans les initialiseurs, cette méthode est exécutée à chaque fois Update-Database est appelé. Il peut être nécessaire de mettre à jour les lignes (réinitialiser les données de départ) au lieu de les insérer. le AddOrUpdate() méthode peut aider avec cela.

    Étant donné que vos indécies uniques peuvent maintenant être créées avec Migrations, vous devez les ajouter au Up() méthode de la migration InitialCreate. Vous pouvez soit les enchaîner sur la CreateTable() appels en utilisant le Index() méthode, ou en appelant le CreateIndex() méthode.

    Vous pouvez utiliser le MigrateDatabaseToLatestVersion initializer maintenant pour exécuter Migrations pendant l'initialisation.

  3. Obtenez un script pour démarrer votre environnement de production.

    Update-Database -Script
    

    A partir du script généré, vous voudrez supprimer presque tout, car les tables existent déjà. Les pièces dont vous aurez besoin sont les CREATE TABLE [__MigrationHistory] et INSERT INTO [__MigrationHistory] déclarations.

  4. En option, déposez le EdmMetadata tableau car il n'est plus nécessaire.

Une fois que vous faites ces choses, vous devriez être bon pour aller avec Migrations. Les nouveaux développeurs peuvent fonctionner Update-Database pour créer la base de données à partir de zéro, et vous pouvez exécuter Update-Database (ou utilisez l'initialiseur Migrations) contre la production pour y appliquer des migrations supplémentaires.


27
2018-05-15 20:33