2012-06-24 15 views
6

Cuando agrego una nueva tabla que tiene algunas relaciones con mi base de datos y luego ejecuto Add-Migration veo que el código se genera en el método Up para agregar la tabla y sus relaciones. Sin embargo, prefiero definir la relación usando la API fluida en el método OnModelCreating. ¿Cómo interactúan estos dos métodos? ¿Puedo eliminar el código del método Up que define la relación, por ejemplo?¿Cómo se relacionan las migraciones OnModelCreating y las migraciones no automáticas?

Respuesta

11

Cada uno de ellos tiene el propósito completamente diferente:

  • OnModelCreating se utiliza para las definiciones en línea fluidez de la API de su modelo. Estas definiciones junto con convenciones predeterminadas, anotaciones de datos y clases de configuración forman la definición completa del modelo.
  • migración explícita define lo que debe hacerse a base de datos para migrar a la forma requerida por el modelo actual

Ahora, ¿cómo los dos se refieren? La migración tiene dos entradas que se usan para generar código de migración (métodos Up y Down). Una entrada es el último registro de migración almacenado en la tabla __MigrationHistory en la base de datos. Este registro contiene un modelo serializado que representa la base de datos. Esta entrada es opcional porque la primera migración debe funcionar sin ella. La segunda entrada es obligatoria: es su modelo actual que se recupera al ejecutar el código en su ensamblado actual =>Add-Migration ejecutará su OnModelCreating para obtener el modelo actual y compararlo con el modelo recuperado de la base de datos. El resultado de la comparación es el contenido de los métodos Up y Down en la migración explícita.

+1

Gracias! Por lo tanto, si entiendo correctamente, el código en el método 'Arriba' reflejará las definiciones establecidas en el método' OnModelCreating' (suponiendo que haya agregado una Migración luego de escribir la definición clara de la API por supuesto). Uno debe * no * eliminar estas definiciones reflejadas de 'Arriba'. – Dabblernl

+0

Sí, eso es correcto. –

Cuestiones relacionadas