Hola a todos, hoy quiero mostrarles como podemos crear la base de datos utilizando Entity Framework Code First Migrations, lo primero que necesitamos es el modelo, para ello definimos par clases:


public class Person
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string LastName { get; set; }

    public virtual Address Address { get; set; }
}

public class Address
{
    public int Id { get; set; }

    public string City { get; set; }

    public string Street { get; set; }
}

Como siguiente paso, creamos el contexto para trabajar con Entity Framework y relacionamos las dos clases anteriores:


public class AppContext : DbContext
{
    public DbSet People { get; set; }

    public DbSet
Address { get; set; } }

Luego de definir las clases, accedemos a la consola de Nuget y habilitamos el uso de Migrations con el comando enable-migrations:

enable-migrations

Una vez finalizada la ejecución del comando, vamos a encontrar una nueva carpeta en el proyecto con el nombre Migrations, que tiene una clase llamada Configuration.cs en donde es posible modificar el comportamiento normal de las migraciones:

migrations_folder

Como ya tenemos listo el modelo de clases, vamos a crear la primera migración, para ello volvemos a la consola de Nuget y ejecutamos add-migration Initial, donde Initial es el nombre de la migración:

initial_migration

Dicha migración la vamos a encontrar en la carpeta Migrations:

migration<em>initial</em>folder

La clase generada tienes dos métodos, Up para hacer la creación de los objetos y Down para eliminarlos:


public partial class Initial : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.Addresses",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    City = c.String(),
                    Street = c.String(),
                })
            .PrimaryKey(t => t.Id);

        CreateTable(
            "dbo.People",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Name = c.String(),
                    LastName = c.String(),
                    Address_Id = c.Int(),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.Addresses", t => t.Address_Id)
            .Index(t => t.Address_Id);

    }

    public override void Down()
    {
        DropForeignKey("dbo.People", "Address_Id", "dbo.Addresses");
        DropIndex("dbo.People", new[] { "Address_Id" });
        DropTable("dbo.People");
        DropTable("dbo.Addresses");
    }
}

Pero antes de ejecutar la migración, vamos a ir a la clase Configuration.cs y en el método Seed el cual es llamado luego de que se ejecuta la migración vamos a definir unos datos iniciales:


internal sealed class Configuration : DbMigrationsConfiguration<ConsoleCodeFirstMigrations.Models.AppContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(ConsoleCodeFirstMigrations.Models.AppContext context)
    {
        context.People.AddOrUpdate(
            c => c.Name, 
                new Person() { Name = "Peter", LastName = "Parker", Address = new Address() { City = "New York", Street = "1" } },
                new Person() { Name = "Bruce", LastName = "Wayne", Address = new Address() { City = "Gotica", Street = "2" } }
            );
    }
}

Y finalmente para ejecutar la migración en la consola de Nuget ejecutamos update-database:

run_migration

Y listo, ya tenemos disponible la base datos:


bd_migration

Espero el post les sea de utilidad y no te olvides de compartirlo :)

Saludos!