Edición manual de una clase de migración EF7 y una instantánea

code-first-migrations entity-framework-core

Pregunta

El comando de migration add EF7 (hasta la fecha, beta5) compara las clases de modelo definidas en DbContext con la instantánea del modelo actual, crea una nueva clase de migración y actualiza la instantánea del modelo.

Necesito modificar la migración para que genere diferentes DDL SQL. Como ejemplo, EF7 usa secuencias para los valores de incremento automático de SQL Server, y me gustaría que usara la identidad. Sin embargo podría ser cualquier otra razón. La migration remove comando sería eliminar físicamente los archivos de migración y revertir el modelo instantánea, por lo que es inútil en este caso.

Hay 3 archivos que contienen código relacionado que parece que necesitan ser editados:

  1. La clase de migración primaria: los métodos Up y Down deben ser modificados.
  2. El archivo DbContextModelSnapshot contiene anotaciones que deben modificarse
  3. La clase parcial de migración secundaria: el archivo [migration].Designer.cs mal llamado también contiene una instantánea modelo para la migración. Supongo que esta instantánea debe coincidir con la instantánea del modelo en el elemento 2, pero no estoy segura. La única información que tengo sobre el propósito es el blog de Brice , que dice "Está ahí en caso de que usted o un proveedor necesiten inspeccionar el modelo para obtener información adicional durante una migración".

Preguntás especificas:

  1. ¿Las dos instantáneas del modelo deben mantenerse sincronizadas para poder realizar correctamente las migraciones?
  2. ¿La modificación de 3 archivos separados es la única forma de editar la migración? (Aunque dependiendo de los cambios, las instantáneas del modelo pueden no ser tocadas en algunos casos).
  3. ¿Hay algún comando EF que regenere solo las instantáneas del modelo, pero no los métodos de migración?

Respuesta aceptada

Respuestas específicas:

  1. ¿Las dos instantáneas del modelo deben mantenerse sincronizadas para poder realizar correctamente las migraciones?
    No, la instantánea en la migración es un último recurso para los escritores proveedores. Por ejemplo, SQLite no puede cambiar el nombre de las columnas, por lo que podría usar la instantánea del modelo de migración para reconstruir una tabla para esta operación. El 99% de las veces, nunca será usado.

  2. ¿La modificación de 3 archivos separados es la única forma de editar la migración?
    La mayoría de las veces, solo debe editar el archivo de migración principal. En casos excepcionales, es posible que deba editar la instantánea del modelo si está trabajando en un entorno de equipo y encuentra un conflicto de combinación. Puedes ignorar el archivo del diseñador; simplemente captura algunos metadatos sobre la migración.

    Es posible que no tenga que editar nada si configura su modelo correctamente. Por ejemplo, para usar la identidad en lugar de las secuencias, DbContext.OnModelCreating() y agregue modelBuilder.ForSqlServer().UseIdentity() .

  3. ¿Hay algún comando EF que regenere solo las instantáneas del modelo, pero no los métodos de migración?
    No, no debería ser necesario ya que casi nunca editas estos archivos.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué