Marco Teorico
Marco Teorico
Marco Teorico
Este tutorial está enfocado en la programación MVC y Entity Framework Code First
(Entidades creadas en la base de datos a través de código desde la aplicación).
Crear Aplicación CRUD (Create Read Update Delete) entidades básicas: Existen
varias formas de desarrollar este tipo de aplicaciones básicas, para agilizar el tiempo y
no agotarlo en módulos más complejos, como transacciones del sistema (factura, detalle
factura, etc.). Utilizaremos los asistentes que proporciona Microsoft para estos efectos,
sin dejar de analizar parte del código para futuras modificaciones.
1. Creación Entidades:
Considerando los conceptos de Ingeniería de Software – Modelando la Estructura del
Sistema (UML), donde la gráfica de diagrama de clases nos orienta sobre la solución y
cómo plasmarla a través de las clases (Entidades), comenzamos por crearla como parte del
modelo de datos.
Nota: Estás entidades pueden estar en otros proyectos anexos (ejemplo proyectos de capa
de negocio o capa de Entidades), sólo gráfico un ejemplo básico.
[MetadataType(typeof(ProductMetaData))]
public partial class Product
{
}
public class ProductMetaData
{
// Personalizar la apariencia y el comportamiento de los campos de datos
// para tipos de datos no intrínsecos (tipo object) en el modelo de datos
[Range(10, 1000,
ErrorMessage = "Value for {0} must be between {1} and {2}.")]
public object Weight;
[Range(300, 3000)]
public object ListPrice;
2. Configuración WebConfig:
Es uno de los pilares del sistema, permite manejar el connectionString, el cual maneja las
conexiones con las bases de datos a través del Contexto.
<connectionStrings>
<add name="StoreContext"
connectionString="Data Source=.;Initial Catalog=Store;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
3. Crear un controlador:
Para nuestro ejemplo y desarrollo a través de Asistentes, crearemos un controlador con la
opción:
Creará de forma automática las opciones CRUD e incluso la conexión dinámica de contexto
Entity framework Code First,
Nota Importante: Este asistente creará un nuevo connectionString con el mismo nombre
pusimos al Clase de Contexto de Datos y debemos modificarlo para que apunte de forma
directa (ver Configuración WebConfig)
4.- Ejecución del Software: Se tardará un poco más de lo normal y creará la base de
datos con la tabla Product (ojo que si pones español la crea productoes) ya que
scaffolding (asistente de creación de tablas similar al de ruby and rails) sólo está
confeccionado para palabras en inglés.
5.- Seguridad integrada: Si te logueas a través de la página veras que creará tablas
adicionales con la configuración de IIS de forma automática.
Con la ejecución de este comando creó una carpeta en nuestro proyecto llamada
Migrations en donde nos crea una clase llamada Configuration.cs
AutomaticMigrationDataLossAllowed = true;
3- Debemos configurar la aplicación que cada vez que inicie verifique si los modelos
sufrieron algún cambio. Esto de hace en el archivo Global.asax de la siguiente
manera. (poner cabecera System.Data.Entity)
Database.SetInitializer(new MigrateDatabaseToLatestVersion<Models.NombreContexto, Migrations.Configuration>());
Crear Relaciones y DataAnnotations:
Las clases al igual que las tablas también tienen relaciones y se vinculan entre ellas,
además entregar atributos a las propiedades de cada clase:
Dos clases una clase llamada TipoDocumento y la otra Persona, un tipo documento puede tener muchas personas y una persona
sólo puede tener un tipo TipoDocumento.
public class TipoDocumento
{
[Key]
public int IdTipoDocumento{ get; set; }
public string DescTipoDocumento { get; set; }
Public Vitual ICollection<Persona> Personas { get; set; }
}
Donde Clase Persona es una Colección dentro de la clase TipoDocumento. Virtual: es un modificador de Acceso.
public class Persona
{
[Key]
public int IdPersona { get; set; }
public string Nombre { get; set; }
public string Paterno { get; set; }
public string Materno { get; set; }
public string Direccion { get; set; }
public DateTime FechaNacimiento { get; set; }
public DateTime HoraIngreso { get; set; }
public string EMail { get; set; }
public string URL { get; set; }
public int IdTipoDocumento { get; set; }
public virtual TipoDocumento TipoDocumento { get; set; }
}
Nótese que clase Persona maneja una relación con la clase TipoDocumento, además debe agregar el campo IdTipoDocumento para
manejar la relación de las clases.
Nota: Antes de crear el controlador debe compilar para que las clases generen las modificaciones de estructuras en la base de datos.
Creamos el controlador con la Opción
DataAnnotations:
Permite entregar atributos a las propiedades de las clases que posteriormente serán importadas a la base de datos:
Genera el formato en el View a través de JQuery de tipo link en las listados y textbox. (También Valida)
[DataType(DataType.Url)]
Genera el formato en el View a través de JQuery de tipo link en las listados y textbox. (También Valida)
[DataType(DataType.MultilineText)]
[DataType(DataType.Currency)]
Este objeto del View, que visualiza un listado de componentes puede ser manipulado desde el controlador de esta manera:
// GET: Personas/Create
public ActionResult Create()
{
var lista = db.TipoDocumentoes.ToList();
lista.Add(new TipoDocumento { IdTipoDocumento = 0, DescTipoDocumento = "[Seleccione Documento]" });
lista = lista.OrderBy(c => c.DescTipoDocumento).ToList();
ViewBag.IdTipoDocumento = new SelectList(lista, "IdTipoDocumento", "DescTipoDocumento");
return View();
}
Donde la lista es traspasada, para posteriormente agregar un Ítems y ser ordenada para su visualización.
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
Esto provocará un error en la capa o procesos que invoque una eliminación de forma automática, la que deberá ser capturada con
catch para evitar el volcamiento de la aplicación.
Seguridad en Facebook
Para lograr la autentificación con Facebook debemos considerar los siguientes pasos:
Crear una aplicación MVC 5
Entrar al portal de Facebook Developers (https://developers.facebook.com/)
Seguir los pasos en Facebook para conseguir dos parámetros importantes para llevarlos a la aplicación:
1. Identificador de la aplicación:
2. Clave secreta de la aplicación
Una vez conseguidos ir al proyecto a la carpeta App_Start – archivo Startup.Auth.cs habilitar la línea que esta
comentada
app.UseFacebookAuthentication(
appId: "Identificador de la aplicación",
appSecret: "Clave secreta de la aplicación");
Listo nuestra aplicación ya cuenta con autentificación facebook.
Crear Roles
Una de las opciones es crearlo en el primer evento del proyecto, lo genera el Global.asax con los siguientes pasos:
Primero: Ponemos las librerías necearías para llevar a cabo las opciones de crear usuario y roles
using System.Data.Entity;
using MVC5_VisitaMedica.Models;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
Segundo: Creamos una conexión con el contexto de seguridad, ojo con el de seguridad...no con el contexto creado por
nosotros."DefaultConnection", debemos tomar la precaución que en el webconfig ambas conexiones apuntes a la misma
base de datos, es ideal no obligatorio.
Tercero: programamos el código que agrega los roles, siempre y cuando no existan en la tablas Roles.
private void CrearRoles(ApplicationDbContext db)
{
var rolesManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(db));
//Verifica la existencia del Rol en la base de Datos.
if (!rolesManager.RoleExists("View"))
{
rolesManager.Create(new IdentityRole("View"));
}
if (!rolesManager.RoleExists("Edit"))
{
rolesManager.Create(new IdentityRole("Edit"));
}
if (!rolesManager.RoleExists("Create"))
{
rolesManager.Create(new IdentityRole("Create"));
}
if (!rolesManager.RoleExists("Delete"))
{
rolesManager.Create(new IdentityRole("Delete"));
}
if (!rolesManager.RoleExists("APM"))
{
rolesManager.Create(new IdentityRole("APM"));
}
if (!rolesManager.RoleExists("ADMIN"))
{
rolesManager.Create(new IdentityRole("ADMIN"));
}
}