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:
Up
y Down
deben ser modificados. DbContextModelSnapshot
contiene anotaciones que deben modificarse [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:
Respuestas específicas:
¿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.
¿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()
.
¿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.