Archivo de la categoría: Bases de Datos

Temas relacionados con el almacenamiento y gestión de datos a través de SGDBs o fuentes normalizadas de datos

Modelo y Base de Datos con Identity en ASP NET

Con la versión 4.5 de .NET Framework se ha incorporado la autenticación basada en Identity. Esto ya lo hablamos en pasadas entradas, ahora vamos a verlo un poquito más a fondo.

Con Identity se crean las siguientes tablas:

  • AspNetRoles
  • AspNetUserClaims
  • AspNetUserLogins
  • AspNetUserRoles
  • AspNetUsers

En estas tablas se guarda toda la información relacionada con los usuarios. Es en la tabla AspNetUsersr donde  se guardan los siguientes campos:

  • Id
  • UserName
  • PasswordHash
  • SecurityStamp
  • Discriminator

En la siguiente imagen se muestra la estructura de tablas y los campos de la tabla AspNetUsers:

Tablas con Identity en ASP.NET 4.5

Ya entrando en el código, si has generado el proyecto web con una de las plantillas que ofrece Visual Studio 2013 verás que en la carpeta «Models» se ha creado un archivo llamado «IdentityModels.cs». En este fichero existen varias clases que definen la funcionalidad de Identity en la aplicación. Las clases son:

  • ApplicationUser. Es la entidad Usuario de aplicación. Hereda de «IdentityUser» e inicialmente está vacía aunque podemos meterle las propiedades que deseemos para personalizar nuestro modelo de usuario (http://go.microsoft.com/fwlink/?LinkID=317594). Si nos fijamos en la clase de la que hereda contiene las siguientes propiedades que se mapean a la base de datos: Id, PasswordHash, SecurityStamp, UserName así como las colecciones que relacionan con las demás tablas.

Clase IdentityUser

  • ApplicationDbContext. Es la clase que maneja el contexto Entity Framework con la base de datos. De hecho en su constructor coge el connectionstring del web.config para su conexión con la base de datos en este caso «DefaultConnection».

Clase ApplicationDbContext

  • UserManager. Es una clase que gestiona operaciones típicas de usuarios con la base de datos. Hereda de «UserStore» y tiene diversos métodos de creación y borrado de usuarios, adicción y eliminación de roles por usuario, búsqueda por nombre o id y muchos más. También tiene gran parte de estos métodos en su modalidad asíncrona. Sin embargo desde aquí no es posible obtener todos los usuarios.
  • IdentityHelper. Esta clase estática situada fuera del espacio de nombres «Models»se encarga de sincronizar la base de datos en los registros de usuarios con el comportamiento de la aplicación en lo que se refiere a la autenticación. Cada vez que un registro de un usuario se efectúa correctamente pasará por IdentityHelper para insertarlo en la base de datos y posteriormente autenticarlo en la aplicación.

Después de analizar todo este rollo vamos a ver como podríamos obtener todos los usuarios con Identity. Si utilizamos directamente el contexto «ApplicationDbContext» accederemos a todos los usuarios mediante su propiedad «Users»:


IList<ApplicationUser> users = context.Users.ToList();

Key o clave en Entity Framework Code First

Al crear un proyecto con visual studio 2013 que utilice Entity Framework Code First me asaltó la duda de por qué en el modelo no existía en casi ninguna clase la DataAnnotation [Key] que establece que propiedad será la encargada de guardar la clave de la tabla.

Primero hay que indicar que en Entity Framework es absolutamente necesario que cada entidad contenga una clave primaria. En el caso de que no se establezca ninguna clave el generador de la base de datos dará un error en tiempo de ejecución.

Sin embargo si Entity Framework no encuentra la DataAnnotation [Key] irá a buscar una propiedad de la clase que contenga la palabra «Id» (no es case-sensitive) y la asignará automáticamente.


public class Movie
 {

[Required, StringLength(100), Display(Name = "Name")]
 public string MovieName { get; set; }
 public int Id { get; set; }
 }

En el ejemplo anterior a la hora de generar la tabla Movie, Entity Framework entenderá que la propiedad «Id» será la encargada de ser la clave.

Entity Framework Code First

Entre las muchas sorpresas que Microsoft nos viene dando con .NET 4.5 está el progreso que ha hecho la tecnología de Entity Framework esforzándose para que el desarrollador se olvide cada vez más de SQLServer y se pueda centrar en lo que es puramente su trabajo: programar (que no es poco).

Esta última versión (Entity Framework 6) permite utilizar el paradigma de programación Code First (Primero el código). Es cierto que en anteriores versiones se podía utilizar esta técnica pero puedo asegurar que era bastante más complicado que ahora.

¿En qué consiste code first?

Code First te permite primero crear el modelo de datos como clases para posteriormente migrarlo a un sistema de gestión de base de datos. Las clases que se definen para crear el esquema de datos se llaman Entidades o Entity Classes.

Cada propiedad de una clase le corresponde una columna en una tabla equivalente de la base de datos. A estas entidades también se les pueden añadir métodos y funciones.

Mover WordPress a otro dominio

Si tienes que mover WordPress a otro dominio supone mucho más que mover los ficheros y la base de datos, desde luego esto último es imprescindible, pero hay que tomar acciones adicionales para borrar/modificar antiguas referencias al antiguo nombre de dominio o localización que se haya mantenido dentro de la base de datos.

Según la ayuda de WordPress tenemos dos opciones:

  • Realizar una búsqueda y reemplazo únicamente en la tabla wp_posts.
  • Usar una herramienta que realiza cambios en la base de datos de una manera segura. La herramienta en cuestión es: Database Search And Replace Script in PHP

Yo he podido probar la segunda opción y te diría que es la mejor porque dudo que en todos los casos valga únicamente con reemplazar en la tabla wp_posts.

Centralizar la información

Me he encontrado en muchas ocasiones que mis clientes tienen información importante en diversas fuentes.

Un ejemplo: Juan que pertenece al área comercial de un empresa posee varios ficheros excel con un listado de sus clientes y las visitas que ha realizado cada día y guarda en su ordenador. Mientras que Jesús también perteneciente al área comercial realiza la misma tarea pero en un archivo de word que a su vez guarda en su portátil.

¿No ve algo realmente erróneo en esta manera de guardar la información?

Seguramente lo habrá adivinado: la información está descentralizada.

Esto provoca o puede provocar que:

  • Información relevante para la empresa no esté disponible en todo momento.
  • Se pierda información importante por error humano (se borra un archivo accidentalmente) o por una desgracia (se produce una avería en un equipo)

Si utiliza un único gestor de base de datos usted podrá:

  • Realizar copias de seguridad de todos los datos con la periodicidad que considere oportuna.
  • Explotar los datos de una forma eficaz y fiable (tiene toda la información de la empresa).

Esto solo es un ejemplo de las ventajas de centralizar la información.

Explotación de datos

El hecho de tener mucha información disponible dentro de una fuente de datos no significa ni mucho menos que le sean de utilidad. Esto lo podrá comprobar fácilmente cuando proceda a buscar un dato de interés para usted en internet. Dentro de la inmensa cantidad de datos a la que pueda acceder lo importante es localizar aquella información relevante para usted en cada momento.

Se puede realizar una analogía similar con la información en su empresa. Una compañía puede poseer gran cantidad de datos (proveedores, clientes, contactos…) pero resultará inutil o casi inútil si no existen herramientas o métodos de consulta para extraer la información relevante en un momento dado.

Por esta razón en casi todas las ocasiones la explotación de datos es un punto fundamental para la toma de decisiones.

Como ingeniero técnico informático puedo desarrollar herramientas y métodos donde se establecen mecanismos de búsqueda de datos y filtros mediante los criterios que se consideren  oportunos.

Últimas tecnologías Bases de datos

Las tecnologías utilizadas en el ámbito de bases de datos son muy diversas pero por suerte tienen puntos en común. Esto a fin de cuentas quiere decir que si usted posee información en cualquier formato es relativamente fácil exportar o importar los datos a cualquier otra fuente de datos.

En los SGDBs (Sistemas de Gestión de Bases de Datos) existe un lenguaje común que simplifica las cosas: SQL (Structurated Query Language).

Puedo ayudarle en cualquier fuente de datos que usted utilice, tecnologías bases de datos:

  • SGDBs – SQLServer, MySql, Oracle…
  • Office DBs – Access, Excel…
  • Ficheros de texto plano – xml, csv, txt (solo si está normalizado)..

Ventajas de contratar un freelance

Últimamente está aumentando la contratación de freelance, autónomos, trabajadores por cuenta propia (o como quiera que lo queramos llamar) por parte de numerosas empresas. ¿Cuál es la razón de esta tendencia?. Existen multitud de beneficios que puede aportar un profesional de este tipo:

  • El perfil habitual de freelance es el de una persona experimentada que ha trabajado en varias industrias, agencias, sectores y/o empresas. De este modo puede ofrecer múltiples puntos de vista sobre un mismo problema, ideas nuevas o aportar conocimientos de su sector.
  • Con un profesional freelance la comunicación es directa. ¿que quiere esto decir?… pues muy sencillo: no necesita de intermediarios como gerentes o gestores que pueden estropear la comunicación. Por lo general es el propio trabajador freelance quien hace todas las tareas. Además un profesional freelance es, entre otras cosas, un comercial que puede asesorar de primera mano a sus clientes sobre como abordar los trabajos.
  • Costes menores: un trabajador freelance suele trabajar  desde casa. Todo esto repercute en los costes ya que un autónomo de este tipo no tiene gastos de local. Además si un empresario contrata a un  empleado tiene que hacer frente a una nómina con sus consiguientes gatos fiscales incluso cuando el trabajador no tenga carga de trabajo o esté  en períodos de formación. Todo esto se puede ahorrar contratando un freelance.
  • Recurrir a un freelance puntualmente para cubrir  ciertas necesidades de negocio que, aún siendo importantes, no son el  principal objetivo de negocio permite externalizar servicios. Esto permite una alta flexibilidad. Por ejemplo: sería absurdo contratar como empleado a un fontanero en  nómina cuando quieres realizar una reforma puntual en tu local o reparar cierta avería.
  • El freelance tiene rapidez de respuesta, no tener que rendir cuentas a nadie salvo a su cliente simplifica mucho las cosas. Él es su propio jefe de proyecto. El cliente de un autónomo solamente dispondrá de un teléfono para hablar sobre su proyecto.
  • El trabajador freelance está en general altamente motivado. Dedica casi el 100% de su tiempo a realizar un proyecto, son responsables con su trabajo y tiene un gran compromiso con el cliente.
  • Si una empresa apuesta por un profesional de este tipo durante largo tiempo éste podrá adquirir el conocimiento de negocio necesario para ofrecer trabajos de mayor calidad y en menor cantidad de tiempo.