jueves, septiembre 13, 2018

Taller Creando Relaciones con Entity Framework en Asp.Net MVC


Cree un proyecto de ASP.Net MVC 5 en VS2017




Coloque un nombre a su solución y de clic en el botón Aceptar o OK.
Aparece la ventana siguiente:




Seleccione la opción MVC como aparece en la imagen, y presione el botón Aceptar.

Esto generara una aplicación MVC con un controlador Home, ahora vamos a crear los siguientes modelos para poder realizar el aplicativo que queremos. En la carpeta de Model vamos a iniciar a crear nuestros modelos que son las tablas e la base de datos.


Creamos la nueva clase


Creamos la clase Producto

public class Producto
{
    [Key]
    public int Id { getset; }
 
    [Required]
    [MaxLength(150)]
    [Display(Name = "Nombre Producto")]
    public string NombreProducto { getset; }
 
    [Required]
    [Display(Name = "Unidad")]
    public int UnidadId { getset; }
 
    [Required]
    [Display(Name = "Existencia")]
    public float Stock { getset; }
 
    [Required]
    [Display(Name = "Proveedor")]
    public int ProveedorId { getset; }
 
    [Required]
    [Range(50,999999999)]
    [Display(Name = "Precio Unitario")]
    public decimal PrecioUnitario { getset; }
 
    [Display(Name = "Fecha Ultima Compra")]
    [DataType(DataType.Date)]
    public DateTime UltimaCompra { getset; }
 
    [ForeignKey("UnidadId")]
    public Unidad Unidad { getset; }
 
}

Como el id de unidad es la llave foránea, debe nombrarse como el nombre de la entidad o tabla y luego el id, de esta manera entity framework crea la relación, además hay que crear una propiedad de navegación que se crea al final y se decora con ForeignKey y el nombre de la propiedad UnidadId,

Vamos a adicionar el using para que nos funcione Key.


Colocamos el mouse y nos aparece el mensaje, damos clic en el bombillo que aparece para nos muestre las opciones.



Damos clic en la primera using System.ComponentModelAnnotations.
Para la propiedad UnidadId colocamos lo siguiente para establecer la relación entre las tablas de producto y unidad.


Aquí toca adicionar el using Schema de DtaAnnotations para que nos funcione el ForeignKey, establece la relación entre dos tablas o modelos de entity framework, entre paréntesis como parámetro ira el nombre de l modelo, en este caso Unidad:

Los modelos ahora quedan de la siguiente manera:

Producto:

public class Producto
{
    [Key]
    public int Id { getset; }
 
    [Required]
    [MaxLength(150)]
    [Display(Name = "Nombre Producto")]
    public string NombreProducto { getset; }
 
    [Required]
    [Display(Name = "Unidad")]
    public int UnidadId { getset; }
 
    [Required]
    [Display(Name = "Existencia")]
    public float Stock { getset; }
 
    [Required]
    [Display(Name = "Proveedor")]
    public int ProveedorId { getset; }
 
    [Required]
    [Range(50,999999999)]
    [Display(Name = "Precio Unitario")]
    public decimal PrecioUnitario { getset; }
 
    [Display(Name = "Fecha Ultima Compra")]
    [DataType(DataType.Date)]
    public DateTime UltimaCompra { getset; }
 
    [ForeignKey("UnidadId")]
    public Unidad Unidad { getset; }
 
}

Unidad
public class Unidad
{
    [Key]
    public int Id { getset; }
 
    [Required]
    [Display(Name = "Nombre de Unidad")]
    [StringLength(30)]
    public string NombreUnidad { getset; }
}


 Ahora podemos compilar el proyecto para generar el controlador y las vistas.



Una vez tengamos los modelos vamos a la carpeta Controller, clic derecho Add, Controller.



Nos muestra la pantalla para crear el controlador


Seleccionamos la que crear las vistas con Entity Framework como esta seleccionada en la imagen. Nos muestra la siguiente imagen para configurar el controlador a crear:


Damos clic en el botón + de DataContext Class porque no existe y lo vamos a crear.
Nos muestra


Ese es el nombre que propone para el contexto de datos, dejemos ese o lo pueden cambiar si lo desean.

Al dar clic en el botón Add nos muestra la pantalla:


A esta pantalla le damos Add al botón para que inicie el proceso de creación de controlador y de las vistas.

Al ejecutar los pasos para Unidad y para Producto tendremos las vistas de ambos asi:


Ahora veamos la vista Create de Productos:


Pueden apreciar que el IdUnidad es un DropDownList,
Entonces ejecuten el programa ingresen datos primero a Unidad y luego creen productos,
Después de esto deben crear el modelo Proveedor, recuerde que Producto tiene IdProveedor, cree el controlador de Proveedor,

Luego borre el controlador de Producto, vaya a Views y busque la carpeta de productos elimínela y vuelva a crear el Controlador de Productos, esta vez debe tener los dos Dropdownlist uno para Unidades y otro para Proveedores.

Una de las ventajas de trabajar con un ORM como Entity Framework es que ademas de abstraernos de los comandos SQL del motor de base de datos, nos permite realizar estas operaciones desde el lenguaje de programación C#.

De esta manera podemos crear relaciones en nuestra base de datos a través de DataAnnotations de MVC para los modelos.

Los espero en la próxima!!!