Entity Framework 4 CF y DataAnnotations

Vamos a continuar con el post anterior sobre EF 4.1 CF y en este caso ver un poco más en profunidad como se integra con el mecanismo de validación provisto por ASP.NET MVC denominado DataAnnotations.

Lo primero sera recordar como teniamos definida la clase Agenda y como EF contruyo la tabla Agenda a paritr de dicho modelo:

1:     public class Agenda
2:     {
3:         public int AgendaId { get ; set ; }
4:         public string Propietario { get ; set ; }
5:         public DateTime FechaCreacion { get ; set ; }
6:
7:         public virtual ICollection <Evento> Eventos { get ; set ; }
8:     }

El esquema de la tabla generada es el siguiente:

Esquema de la tabla Agenda

Esquema de la tabla Agenda

Como vemos en las propiedades de cada columna, el campo Propietario acepta valores nulos, y es lógico segun lo que definimos en nuestro modelo. En cambio el campo FechaCreacion no lo es, ya que el tipo de datos sobre el cual se armo es DateTime y el mismo no admite valores nulos.

Ahora bien, supongamos que por algun motivo necesitamos que el propietario se deba cargar de forma obligatoria, si bien este modelo sigue sirviendo, nada nos asegura que este dato siempre sea grabado en la base de datos. Entonces que mejor forma de asegurarnos esto que deshabilitando la propiedad Allow Nulls en la tabla. Pero si solo lo hacemos en la base de datos, puede darse el caso que alguna instancia de nuestro modelo venga con dicho atributo nulo, y al momento de grabar tengamos uno de dos problemas: o una excepción porque el campo es nulo, o se graba un espacio en blanco en dicho registro.

Por lo tanto, la mejor opción es aplicar ambas validaciones: a nivel DB y a nivel modeloASP.NET MVC provee una interesantisima libreria que nos permite aplicar reglas de validación sobre nuestro modelos, estas reglas luego podemos replicarlas en cada controlador y vista en donde sea utilizado el modelo.

Esta librería es DataAnnotation y las normas que podemos definir se aplican como atributos de las clases, generalmente a nivel de las propiedades. En nuestro caso, y sin complicarla demasiado, vamos a marcar la propiedad Propietario como requerida (Required):

1: using System.ComponentModel.DataAnnotations;
2:
3: namespace MvcAndEF.Models
4: {
5:     public class Agenda
6:     {
7:         public int AgendaId { get ; set ; }
8:         [Required]
9:         public string Propietario { get ; set ; }
10:         public DateTime FechaCreacion { get ; set ; }
11:
12:         public virtual ICollection<Evento> Eventos { get ; set ; }
13:     }
14: }

Lo mas interesante de esto, es que DataAnnotations se integra perfectamente con EF4 y este último al detectar una propiedad como requerida, modifica las estructura de la base de datos deshabilitando en ese campo la propiedad Allow Nulls, evitando de esta forma que se ingresen valores nulos en dicho campo, y asi asegurarnos que ese dato siempre estara disponible en el registro.

Nuevo esquema de la tabla Agenda

Nuevo esquema de la tabla Agenda

Además ya tendremos nuestra validación funcionando en el formulario web:

Validación web

Validación web

Espero que les haya sido de utilidad!

Anuncios

4 comentarios en “Entity Framework 4 CF y DataAnnotations

  1. Hola Sebys, exelente tu blog, me estoy leyendo todos los referentes a mvc.
    Te quería hacer una pregunta no tanto de este tema sino mas general, resulta que yo estoy recién empezando con asp mvc (vengo de php y aprovecho mis conocimientos de zend framework para aplicarlo al mvc).
    El tema es que no he encontrado acá en Uruguay academias donde enseñen mvc, todas estan con asp.net.
    Te quería preguntar, capaz que sabes, si microsoft tiene algún curso online de MVC (si es en español mejor).
    Gracias

    PD: si crees que la pregunta no es para este post, borrala y contestame por mail, como quieras, saludos y gracias.

    • Hola Fernando, un placer conocerte.

      Mira, yo lo que recomiendo para aquellos que empiezan con ASP.NET MVC es leer el primer capitulo del libro NerdDinners – http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf – el cual hace un paso a paso de como se arma una aplicación de este tipo (si bien trabaja sobre la primer versión de ASP.NET MVC, como guía de inicio me parece altamente recomendable).

      Espero que te sirva y cualquier cosa puedo sugerirte un par de videos tutoriales para que veas.

      Abrazos.

  2. Hola Sebis, gracias por la info que es de muy buen ayuda.
    Tengo un problema con los campos date en mvc3. Cuando lo hago en mi maquina local funciona perfecto pero cuando lo hago en un servidor que tiene configuracion mm-dd-yy me da problemas. Nunca me valida el modelo y no me permite dar de alta a los registros.
    Como hago para decirle al mvc3 que el formato de las fechas sea siempre dd-mm-yy independientemente de la configuracion del servidor donde este la aplicacion??
    Gracias

    • Podes hacerlo mediante la siguiente entrada en el web.config: globalization uiCulture="es-AR" culture="es-AR"
      En este caso estaría configurado para Argentina.

      Espero que te sea de utilidad y cualquier cosa la seguimos.
      Abrazos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s