En Entity Framework, al usar Enable-Migrations , se crea una carpeta de Migraciones que contiene una Configuration heredada de DbMigrationsConfiguration como esta:
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext> { ... } Todas las migraciones creadas con Add-Migration también se colocan en la carpeta Migraciones .
public partial class Init: DbMigration { public override void Up() { ... } public override void Down() { ... } } No encontré ningún código que relacione estos dos juntos (por ejemplo, tener una propiedad de configuración en migraciones). La única relación que encontré es que ambos están colocados en la misma carpeta. Si tengo más de 1 DbContext y, en consecuencia, más de 1 configuración, me pregunto cómo se distinguen estos DbMigration .
Pregunta: ¿Cómo se relacionan las clases de DbMigration con una Configuration ?
Están relacionados por convención. De forma predeterminada, almacenará las migraciones en una carpeta raíz llamada Migraciones. Puede anular esto en el constructor de la configuración ( https://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigrationsconfiguration(v=vs.113).aspx ) o cuando habilita -migraciones:
public Configuration() { AutomaticMigrationsEnabled = true; MigrationsDirectory = @"Migrations\Context1"; }Para varios contextos, cree una configuración y una carpeta diferentes para cada uno mediante -ContextTypeName ProjectName.Models.Context2 -MigrationsDirectory:Migrations\Context2. Aquí hay un tutorial: http://www.dotnettricks.com/learn/entityframework/entity-framework-6-code-first-migrations-with-multiple-data-contexts
Cuando ejecuta el comando update-database, se realizan las operaciones de la base de datos en el método up() en las últimas clases derivadas de DbMigration. Si eso tiene éxito, se ejecutan los comandos en la clase Configuración. Uno de esos métodos es el método seed() donde, opcionalmente, puede agregar código para insertar valores en sus tablas después de una migración. Cuando especifica una migración de destino (presumiblemente anterior a la última), la migración funciona a través de la cadena de métodos down() en las clases de migración para llegar a la versión que desea.