EF 1.1 Code First .NET Core Visual Studio 2017 | Parte 2

En el artículo previo, hemos visto el acercamiento Code First con Entity Framework y Migrations, donde generamos nuestro modelo y lo impactamos contra una base de datos, todo desde el Visual Studio. En esta oportunidad, veremos cómo modificarlo, generar restricciones y aplicarlas a nuestra base de datos para mantenerla actualizada con nuestro desarrollo.

How to:

Actualizar nuestro modelo

Nuestro modelo, contaba con lo siguiente:

Movie

  • Id
  • Title
  • Price
  • Genre

Genre

  • Id
  • Name

Supongamos que por necesidad del negocio, ahora debemos agregar el Director a cada película y cada director debe:

  • Contar con nombre y apellido donde cada uno no debe tener más de 50 caracteres
  • Tanto el nombre como el apellido deben ser registrados si o si, no pueden estar vacíos
  • El id debe ser IdDirector

Generación de clases

Generamos nuestro modelo para Director, dentro de la carpeta Models:

using System.ComponentModel.DataAnnotations;

namespace CodeFirst.EF.Demo.Models
{
    public class Director
    {
        [Key]
        public int IdDirector { get; set; }

        [Required]
        [StringLength(maximumLength:50)]
        public string Name { get; set; }

        [StringLength(maximumLength: 50)]
        public string Apellido { get; set; }



    }
}

Como pueden ver, estamos haciendo uso de DataAnnotations para indicar que IdDirector va a ser clave primaria, que el nombre y apellido son requeridos y el largo máximo de caracteres. También es posible realizarlo mediante FluentAPI.

A su vez actualizamos nuestro modelo para Películas, agregando el Director:

namespace CodeFirst.EF.Demo.Models
{
    public class Movie
    {

        public int Id { get; set; }

        public string Title { get; set; }

        public decimal Price { get; set; }

        public virtual Genre Genre { get; set; }

        public virtual Director Director { get; set; }
    }
}

Hasta el momento, ya hemos cubierto las necesidades de negocio desde el punto de vista del desarrollo del modelo.

Modificación del contexto de base de datos

Modificamos el contexto que hemos generado en la parte 1 del artículo, donde agregaremos la relación entre el modelo y la tabla para Director, mediante la palabra reservada DbSet.

using Microsoft.EntityFrameworkCore;
using CodeFirst.EF.Demo.Models;

namespace CodeFirst.EF.Demo.Data
{
    public class MovieDbContext: DbContext
    {
        public MovieDbContext(DbContextOptions<MovieDbContext> options) : base(options)
        {
        }

        public DbSet<Genre> Genres { get; set; }

        public DbSet<Movie> Movies { get; set; }

        public DbSet<Director> Directors { get; set; }
    }
}

Creación de Migración

Es el momento de generar la migración con los nuevos cambios realizados, para ello desde el CMD de Windows, nos posicionamos en el path del proyecto como se muestra a continuación:

Ejecutamos el siguiente comando:

dotnet ef migrations add v1_DirectorMovie

Si todo sale bien, veremos en la carpeta Migrations, la clase v1_DirectorMovie con los cambios a aplicar en esta migración.

Si exploramos un poco dicha clase podremos observar todas las restricciones que generamos en nuestro modelo y como impactarán en la base de datos:

migrationBuilder.CreateTable(
                name: "Directors",
                columns: table => new
                {
                    IdDirector = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    Apellido = table.Column<string>(maxLength: 50, nullable: true),
                    Name = table.Column<string>(maxLength: 50, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Directors", x => x.IdDirector);
                });

Aplicar cambios en la base de datos

Es momento de impactar los cambios generados en la base de datos. Para ello ejecutaremos desde el CMD de Windows el siguiente comando, siempre posicionados desde el path de nuestro proyecto:

dotnet ef database update

Si utilizamos el SQL Server Object Explorer, que los cambios fueron aplicados con las restricciones que definimos en el modelo.

Conclusión

Como pudimos observar, utilizando el modelo CodeFirst con Entity Framework damos gran ventaja a los desarrolladores, ya que pueden tener control desde el código de la aplicación del modelo de base de datos, permitiendo mantener mediante Migration actualizado siempre la base de datos respecto al modelo.

Desde mi experiencia personal, es un buen enfoque para comenzar los desarrollo de software o utilizarlo en proyectos chicos, aunque siempre (o casi) se termina enfocando en un modelo Database First para proyectos grandes o productivos.

En estos dos artículos, hemos cubierto lo básico como para poder iniciarnos en el desarrollo con el acercamiento Code First, en publicaciones futuras abarcaremos otra alternativa como es Database First.

Pueden descargar o actualiazr el código desde GitHub

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

Up ↑

%d bloggers like this: