Modification manuelle d'une classe et d'un instantané de migration EF7

code-first-migrations entity-framework-core

Question

La commande migration add EF7 (à ce jour, beta5) compare les classes de modèle définies dans DbContext à l'instantané de modèle actuel, crée une nouvelle classe de migration et met à jour l'instantané de modèle.

J'ai besoin de modifier la migration pour qu'elle génère différents SQL DDL. Par exemple, EF7 utilise des séquences pour les valeurs d'auto-incrémentation de SQL Server, et j'aimerais qu'il utilise l'identité. Cependant, cela pourrait être une autre raison. La migration remove la migration remove commande serait physiquement supprimer les fichiers de migration et de revenir l'instantané du modèle, il est donc inutile dans ce cas.

Il y a 3 fichiers contenant du code apparenté qui semble devoir être édité:

  1. La classe de migration principale: les méthodes Up et Down doivent être modifiées.
  2. Le fichier DbContextModelSnapshot contient des annotations à modifier.
  3. Classe partielle de la migration secondaire: le fichier [migration].Designer.cs mal nommé, contient également un instantané de modèle pour la migration. Je suppose que cet instantané doit correspondre à l'instantané du modèle du point 2, mais je n'en suis pas certain. La seule information dont je dispose à propos de son objet provient du blog de Brice , qui indique: "C'est là si vous-même ou un fournisseur devez inspecter le modèle pour obtenir des informations supplémentaires lors d'une migration."

Questions spécifiques:

  1. Les deux instantanés du modèle doivent-ils être synchronisés pour pouvoir effectuer correctement les migrations?
  2. La modification de 3 fichiers séparés est-elle le seul moyen de modifier la migration? (Bien que, en fonction des modifications, les instantanés du modèle peuvent ne pas avoir besoin d'être touchés, dans certains cas.)
  3. Existe-t-il une commande EF permettant de régénérer uniquement les instantanés du modèle, mais pas les méthodes de migration?

Réponse acceptée

Réponses spécifiques:

  1. Les deux instantanés du modèle doivent-ils être synchronisés pour pouvoir effectuer correctement les migrations?
    Non, l'instantané de la migration est un dernier recours pour les rédacteurs de fournisseurs. Par exemple, SQLite ne peut pas renommer les colonnes, il peut donc utiliser le cliché de modèle de la migration pour reconstruire une table pour cette opération. 99% du temps, il ne sera jamais utilisé.

  2. La modification de 3 fichiers séparés est-elle le seul moyen de modifier la migration?
    La plupart du temps, vous ne devez jamais modifier que le fichier de migration principal. Dans de rares cas, vous devrez peut-être modifier l'instantané du modèle si vous travaillez dans un environnement d'équipe et que vous rencontrez un conflit de fusion. Vous pouvez ignorer le fichier de concepteur. il ne capture que des métadonnées sur la migration.

    Il se peut que vous n’ayez rien à modifier si vous configurez votre modèle correctement. Par exemple, pour utiliser une identité au lieu de séquences, substituez DbContext.OnModelCreating() et ajoutez modelBuilder.ForSqlServer().UseIdentity() .

  3. Existe-t-il une commande EF qui régénère uniquement les instantanés du modèle, mais pas les méthodes de migration?
    Non, cela ne devrait pas être nécessaire puisque vous n’éditez presque jamais ces fichiers.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi