4.2 Crear la tabla Categoría y sus validaciones

Con la base de datos creada vamos a crear nuestro primer modelo. Por convención 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ónDescripción

[Required]

El campo es obligatorio

[StringLength(30)]

El campo tiene máximo 30 caracteres

[Range(0,999.99)]

El campo acepta valores de 0 a 999.99. El campo debe ser de tipo decimal

[Compare("Password")]

El valor del campo debe ser igual al valor del campo Password.

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

Permite especificar una expresión a 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. Por ejemplo puedes agregar una validación que revise 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 campos 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 los modelos de la base de datos.

Remove-Migration

En caso de encontrar algún error en la migración creado, lo podemos borrar con este comando. Solamente puedes revertir la última migración no aplicada

Update-Database

Permite actualizar la base de datos

Update-Database nombre

Permite actualizar la base de datos a la migración con el nombre de la migración 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 a la base de datos

Creando migraciones desde Visual Studio for Mac

  1. Primero desde una terminal agrega la herramienta dotnet ef con el siguiente comando

dotnet tool install --global dotnet-ef

2. Sobre el proyecto da clic derecho del mouse luego Abrir en Terminal

2.Ejecutamos el comando para crear la migración

dotnet ef migrations add 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 CaducaRest

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

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 2.3 Paquetes Nuget

La base de datos de la cual vamos a generar las clases es sakila la cual es una base de datos de ejemplo 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.

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

Last updated