BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte...
Transcript of BASES DE DATOS AVANZADAS - uv.mx · Sistema de registro de boletos de agencia de transporte...
Facultad de Estadística e Informática
BASES DE DATOS AVANZADAS
MVC – Clase 20 MODEL VIEW CONTROLLER
Referencias Microsoft Virtual Academy. (9 agosto de 2014). Introduction to ASP.NET MVC. Obtenido de: https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=nKZwZ8Zy_3504984382
Rick Anderson. (28 sep de 2015). Getting Started with ASP.NET MVC 5. Obtenido de https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/getting-started
Nemanja, Kojic. ASP.NET MVC 5. Introducing ASP.NET MVC5. Microsoft. Obtenido de http://rti.etf.bg.ac.rs/rti/si3iep/vezbe-2014/ASP%20.NET%20MVC.pdf
Proyecto Final SISTEMA DISTRIBUIDO DE REGISTRO DE BOLETOS DE AUTOBUSES DE TRANSPORTE
Descripción Sistema de registro de boletos de agencia de transporte terrestre para ejemplificar el uso en la práctica de una base de datos distribuida
Desarrollado en plataforma web (ASP.NET MVC)
Catálogos: ◦ Regiones (fragmentos de la base de datos) ◦ Estados ◦ Corridas de autobuses ◦ Pasajeros ◦ Viajes (corrida + pasajero = boletos)
Descripción
Descripción
Región I - CENTRO
Ciudad de México
México
Prueba
Región 3 - NORTE • Chihuahua • Coahuila • Nuevo León
Región 2 - SUR • Veracruz • Tabasco • Chiapas
Distribución Catálogo Descripción Datos almacenados Región Tres fragmentos en los que esta dividida
la base de datos GLOBALES
RegiónLocal Nombre del fragmento local en cada región
LOCALES
Estados Estados de la república a los que abarcan las regiones
GLOBALES
Corridas Itinerario de corridas de autobuses en cada origen regional
LOCALES
Pasajeros Catálogo de pasajeros en cada región LOCALES Viajes Boletos adquiridos por región vinculando
una corrida con un pasajero LOCALES
Instalación de Visual Studio 2017 Community https://www.visualstudio.com/es/downloads/
Desarrollo de ASP.NET y web
Creando un nuevo proyecto 1
2
3
4
Agregando la referencia EntityFramework
Agregando las conexiones de la BD distribuida
<configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <connectionStrings> <add name="CentroCdMx" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\CentroCdMx.mdf;Initial Catalog=CentroCdMx;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="SurVer" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\SurVer.mdf;Initial Catalog=SurVer;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="NorteMty" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\NorteMty.mdf;Initial Catalog=NorteMty;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <appSettings>
Ayuda para el manejo de validaciones en español
Ayuda para el manejo de validaciones en español $.validator.methods.range = function (value, element, param) { var globalizedValue = value.replace(",", "."); return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); } $.validator.methods.number = function (value, element) { var globalizedValue = value.replace(",", "."); return this.optional(element) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(globalizedValue); } //Date dd/MM/yyyy $.validator.methods.date = function (value, element) { var globalizedValue = value; if (globalizedValue.indexOf("/") > 0) { var date = value.split("/"); globalizedValue = date[1] + "/" + date[0] + value.substr(value.indexOf(date[1] + "/") + 2); } return this.optional(element) || !/Invalid|NaN/.test(new Date(globalizedValue).toString()); } $.extend(jQuery.validator.messages, { required: "Este campo es requerido.", remote: "Por favor corrija este campo.", email: "Por favor introduzca una dirección de correo electrónico válida.", url: "Por favor introduzca una URL válida.", date: "Por favor introduzca una fecha válida.", dateISO: "Por favor introduzca una fecha válida (ISO).", number: "Por favor introduzca un número válido.", digits: "Por favor introduzca solo dígitos.", creditcard: "Por favor introduzca un número de tarjeta de crédito válido.", equalTo: "Por favor introduzca el mismo valor nuevamente.", accept: "Por favor introduzca un valor con una extensión válida.", maxlength: jQuery.validator.format("Por favor no introduzca más de {0} caracteres."), minlength: jQuery.validator.format("Por favor introduzca al menos {0} caracteres."), rangelength: jQuery.validator.format("Por favor introduzca un valor entre {0} y {1} de longitud de caracteres."), range: jQuery.validator.format("Por favor introduzca un valor entre {0} y {1}."), max: jQuery.validator.format("Por favor introduzca un valor menor o igual a {0}."), min: jQuery.validator.format("Por favor introduzca un valor mayor o igual a {0}.") });
Filtro para verificar que se ha seleccionado una Región
Filtro para verificar que se ha seleccionado una Región
Filtro para verificar que se ha seleccionado una Región using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace ProyectoADO.Filters { public class VerificaRegionAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); // Si no se ha seleccionado la región, cancelamos la petición if (HttpContext.Current.Session["RegionId"] == null) filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary(new { controller = "Region", action = "Index" })); } } }
Agregando los Modelos
Modelo
Vista Controlador
Modelo Region
Modelo Region using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Region { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int RegionId { get; set; } [Required] [Display(Name = "Región")] public string Nombre { get; set; } } public static class CRegionId { public const int CENTRO = 1; public const int SUR = 2; public const int NORTE = 3; } }
Modelo RegionLocal
Modelo RegionLocal
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class RegionLocal { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int RegionLocalId { get; set; } [Required] public string Nombre { get; set; } } }
Modelo Estado
Modelo Estado using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Estado { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EstadoId { get; set; } [Required] [Display(Name = "Estado")] public string Nombre { get; set; } [Required] public string NombreAbreviado { get; set; } [Required] public int RegionId { get; set; } [ForeignKey("RegionId")] public Region Region { get; set; } } }
Modelo Pasajero
Modelo Pasajero using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Pasajero { public int PasajeroId { get; set; } [Required] [Display(Name = "Estado")] public int EstadoId { get; set; } [ForeignKey("EstadoId")] public Estado Estado { get; set; } [Required] public string Nombre { get; set; } [Required] [EmailAddress] public string Correo { get; set; } } }
Modelo Corrida
Modelo Corrida using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Corrida { public int CorridaId { get; set; } [Required] [Display(Name = "Origen")] public int OrigenId { get; set; } [ForeignKey("OrigenId")] public Estado Origen { get; set; } [Required] [Display(Name = "Destino")] public int DestinoId { get; set; } [ForeignKey("DestinoId")] public Estado Destino { get; set; } [Required(ErrorMessage = "El campo {0} debe ser una fecha válida.")] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy HH:mm}")] public DateTime Fecha { get; set; } [Required] [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = false)] public decimal Precio { get; set; } [Required] [Range(0, 50, ErrorMessage = "Se permite un valor entre 1 y 50 asientos")] public int Asientos { get; set; } } }
Modelo Viaje
Modelo Viaje using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ProyectoADO.Models { public class Viaje { public int ViajeId { get; set; } [Required] public int CorridaId { get; set; } [ForeignKey("CorridaId")] public Corrida Corrida { get; set; } [Required] [Display(Name = "Pasajero")] public int PasajeroId { get; set; } [ForeignKey("PasajeroId")] public Pasajero Pasajero { get; set; } [Required] [Display(Name = "Asiento")] public int NumAsiento { get; set; } } }
Agregar los DbContext para cada Región
DbContext de base: BaseDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones
DbContext de base: BaseDbContext
using ProyectoADO.Models; using System.Data.Entity; namespace ProyectoADO.DbContexts { public class BaseDbContext : DbContext { public DbSet<Region> Fragmentos { get; set; } public DbSet<RegionLocal> FragmentoLocal { get; set; } public DbSet<Corrida> Corridas { get; set; } public DbSet<Estado> Estados { get; set; } public DbSet<Pasajero> Pasajeros { get; set; } public DbSet<Viaje> Viajes { get; set; } } }
DbContext CENTRO: CentroDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones
DbContext CENTRO: CentroDbContext
using ProyectoADO.DbContexts; namespace ProyectoADO.DbContexts { public class CentroDbContext : BaseDbContext { } }
DbContext SUR: SurDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones
DbContext SUR: SurDbContext
using ProyectoADO.DbContexts; namespace ProyectoADO.DbContexts { public class SurDbContext : BaseDbContext { } }
DbContext NORTE: NorteDbContext Para no repetir los BdSet en cada Región, creamos un BDContext base y usaremos herencia para heredar sus propiedades a las regiones
DbContext NORTE: NorteDbContext
using ProyectoADO.DbContexts; namespace ProyectoADO.DbContexts { public class NorteDbContext : BaseDbContext { } }
Gracias por su atención
Referencias Microsoft Virtual Academy. (9 agosto de 2014). Introduction to ASP.NET MVC. Obtenido de: https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=nKZwZ8Zy_3504984382
Rick Anderson. (28 sep de 2015). Getting Started with ASP.NET MVC 5. Obtenido de https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/getting-started
Nemanja, Kojic. ASP.NET MVC 5. Introducing ASP.NET MVC5. Microsoft. Obtenido de http://rti.etf.bg.ac.rs/rti/si3iep/vezbe-2014/ASP%20.NET%20MVC.pdf