4.2 Crear la tabla Categoría y sus validaciones

Con la base de datos creados vamos a crear nuestro primer modelo. Por estándar todas las clases de las tablas estarán dentro de la carpeta Models.

Entity Framework incluye validaciones predefinidas que puedes utilizar las mas comunes son:

Validaciones

Validación

Descripción

[Required]

Indica que el campo es obligatorio

[StringLength(30)]

Indica que el campo tiene máximo 30 caracteres

[Range(0,999.99)]

Indica que el campo acepta valores de 0 a 999.99. En este caso el campo debe ser de tipo decimal

[Compare("Password")]

Indica que el valor del campo debe ser igual al valor del campo Password.

[RegularExpression(@"^[SMAsma][0-9]{4}$"

Permite especificar una expresión validar. En este caso la expresión regular indica que el campo debe empezar con cualquiera de las siguientes letras SMAsma y debe seguir de 4 números. Ejemplo S1801. Este campo podría indicar que es la semana 1 del año 2018

[Url]

El campo debe tener formato de URL

[Phone]

El campo debe ser un número de teléfono

[EmailAddress]

El campo debe tener formato de correo electrónico

[CreditCard]

El campo debe tener formato de tarjeta de crédito

Adicionalmente puedes crear validaciones personalizadas como por ejemplo puedes agregar una validación que revise por ejemplo que si una venta esta cancelada se deben capturar los motivos de cancelación.

Primero vamos a crear la tabla en este caso crearemos la tabla Categoría.

Crear el modelo

  1. En el proyecto de Visual Studio Agregamos una Nueva Carpeta llamada Models

  2. Dentro de la carpeta Models agregamos una nueva clase llamada Categoria.cs

  3. Tecleamos los nombres de los campos como propiedades públicas

    Categoria.cs
    public class Categoria
    {
    public int Id { get; set; }
    public int Clave { get; set; }
    public string Nombre { get; set; }
    }
  4. Agregamos las validaciones de cada campo

  5. Categoria.cs
    public class Categoria
    {
    public int Id { get; set; }
    [Required(ErrorMessage = "Por favor teclea el campo Clave")]
    [Range(1,999)]
    public int Clave { get; set; }
    [Required(ErrorMessage = "Por favor teclea el campo Nombre")]
    public string Nombre { get; set; }
    }

5. Para MySql debemos agregar el tipo de dato para los capos varchar o text e indicar que el campo Id es identity.

Categoria.cs
public class Categoria
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required(ErrorMessage = "Por favor teclea el campo Clave")]
[Range(1,999)]
public int Clave { get; set; }
[StringLength(80)]
[Required(ErrorMessage = "Por favor teclea el campo Nombre")]
[Column(TypeName = "VARCHAR(80)")]
public string Nombre { get; set; }
}

Crear el DBContext

.NET cuenta con la clase DBContext que te permite interactuar con la base de datos. Todas las tablas que necesites en tu base de datos se irán agregando a esta clase.

  1. Dentro de la carpeta Models agrega una nueva clase llamada CaducaContext que herede de la clase DBContext. Puedes presionar la tecla Control y el . (punto) para agregar automáticamente el import

  2. Agregamos el constructor el cual recibe como parámetro un DBContextOptions el cual indicará las opciones de la base de datos a utilizar.

    CaducaContext.cs
    public class : DbContext
    {
    public CaducaContext(DbContextOptions<CaducaContext> options) : base(options)
    {
    }
    }
  3. Agregamos la tabla como virtual DbSet

    CaducaContext.cs
    public class CaducaContext : DbContext
    {
    public CaducaContext(DbContextOptions<CaducaContext> options)
    : base(options)
    {
    }
    public virtual DbSet<Categoria> Categoria { get; set; }
    }
  4. Agregamos la cadena de conexión en el archivo appsetings. En este caso agregamos el usuario administrador

appsettings.json
{
"ConnectionStrings": {
"DefaultConnection":"server=localhost;port=3306;database=caduca;
user=AdminCaduca;Password=StKRV6MR6A;sslMode=none"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}

5. En el archivo startup.cs configuramos que nuestra clase CadudaContext utilizará una base de datos MySQL y la cadena de conexión de nuestro archivo appsetings. Esto lo agregamos en el método ConfigureServices en este método estaremos configurando los servicios de nuestros servicios REST

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(
CompatibilityVersion.Version_2_2);
services.AddDbContext<CaducaContext>(options =>
options.UseMySql(Configuration
.GetConnectionString("DefaultConnection")));
}

Crear la Migración Inicial y actualizar la base de datos

Comandos para las migraciones

Para actualizar tu base de datos necesitamos ejecutar una serie de comandos. Se tienen 2 conjuntos de comandos desde el administrador de Paquetes que esta en visual Studio Comunity o desde la consola si estas en mac.

Los comandos para las migraciones desde Visual Studio Comunity son:

Comando

Descripción

Add-Migration nombre

Permite agregar una migración. Esta migración contiene todos los cambios realizados a la base de datos

Remove-Migration

En caso de encontrar algún error en la migración creado, lo podemos borrar con este comando que remueve la última migración

Update-Database

Permite actualizar la base de datos

Update-Database nombre

Permite actualizar la base de datos a la migración con el nombre pasado como parámetro

Script-Migration

Permite generar el script para crear y/o actualizar la base de datos

Puedes ver la documentación oficial para las migraciones aqui.

Creando la primer migración desde Visual Studio Comunity

Vamos a crear nuestra primer migración

  1. Abrimos la consola del Administrador de Paquetes. Desde Visual Studio damos clic en Herramientas -> Administrador de Paquetes Nuget -> Consola del Administrador de Paquetes

  2. Ejecutamos el comando Add-Migration CreacionInicial. Esta instrucción nos creará una carpeta Migrations la cual contiene el código para crear la tabla categoría. Revisamos el archivo para ver que todo este correcto.

  3. Ejecutamos el comando Update-Database para crear la tabla. Si consultas tu base de datos de MySQL adicional a la tabla Categoría se crea la tabla __efmigrationshistory la cual guarda el registro de las migraciones aplicadas la base de datos

Creando migraciones desde Visual Studio for Mac

  1. Sobre el proyecto clic derecho del mouse luego Herramientas -> Abrir en Terminal

2.Ejecutamos el comando para crear la migración dotnet ef migrations CreacionInicial

3. Ejecutamos el comando para actualizar la base de datos dotnet ef database update

Generar el script

Opcionalmente puedes generar el script de la base de datos.

  1. Agrega una carpeta scripts a tu proyecto

  2. Genera el script con el siguiente comando en la Consola del Administrador de Paquetes

  3. Script-Migration -Output ./CaducaRest/Scripts/Categoria.sql

Generar las clases de una base de datos existente

Si ya cuentas con tu base de datos, puedes utilizar el comando en la Consola del Administrador de Paquetes. Para esto crea un nuevo proyecto y agrega los paquetes del capítulo 3.3

La base de datos de la cual vamos a generar las clases es sakila la cual es una base de datos de prueba de mysql

Puedes descargar el script de la base de datos sakila aqui. Recuerda crear un usuario administrador para conectarte a la base de datos Sakila (Capitulo 4.1)

El comando para generar las clases es:

Scaffold-DbContext "server=localhost;port=3306;user=AdminSakila;password=mypass;database=sakila" MySql.Data.EntityFrameworkCore -OutputDir sakila -f