[Entity Framework] Sobre Data Annotations

Hola, ya llevaba tiempo sin escribir en esta serie en la que intento cubrir aspectos sobre todas la versiones de este potente ORM. En el último post  que alcance escribir aun tocaba el tema de las convenciones que debemos respetar para que el Entity Framework nos entienda lo que queremos hacer, pero si dado el caso no queremos extender uno de estos comportamientos ¿como lo logramos? Pues bien, para eso llegaron los Data Annotations. Estos son atributos que podemos usar para definir información adicional a nuestras clases de entidad, con estas podemos sobrescribir el comportamiento por defecto de las convenciones de entity framework.

Para poder usar Data Annotations referenciamos la librería System.ComponentModel.DataAnnotations

Ejemplos.

–  Llave primaria.

Como vimos en el primer post sobre codefirst vimos que Entity Framework tomara como llave primaria aquella propiedad que lleve como nombre o que en su nombre tenga el sufijo “Id” o “ID”, y es muy conveniente, pues no se me ocurriría una llave primaria sin esta convención, pero dado el caso yo quisiera que mi tabla Pais, su llave primaria llevara otro nombre, como por ejemplo PaisLlavePrimaria solo debemos usar el Atributo [Key], así:

    public class Pais
    {
        [Key]
        public int PaisLlavePrimaria { getset; }
        public string Nombre { getset; }
    }

–  Configurando tipo Identity de los tipos numéricos

Por defecto cuando Entity Framework nos genera una llave primaria la deja como Identity incremento uno. Para sobrescribir este comportamiento basta con usar el atributo DatabaseGenerated y seleccionar una de las opciones  del enumerador DatabaseGeneratedOption, así:

    public class Pais
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Id { getset; }
        public string Nombre { getset; }
    }

–  Campo obligatorio

Basta con decorarlo con Required, así:

    public class Pais
    {
        public int Id { getset; }
        [Required]
        public string Nombre { getset; }
    }

– Longitud del campo.

Para definir la longitud de un campo basta con decorarlo con el atributo MaxLength, así:

    public class Pais
    {
        public int Id { getset; }
        [MaxLength(30)]
        public string Nombre { getset; }
    }

– Ignorar una propiedad

Si tenemos una propiedad que no deseamos que se envie como columna la base de datos, basta con decorarla con el atributo NotMapped, así:

    public class Pais
    {
        public int Id { getset; }
        public string Nombre { getset; }
        [NotMapped]
        public int Poblacion { getset; }
    }

– Mapear una propiedad a una columna con distinto nombre

Si en nuestro modelo conceptual trabajamos nombres que no nos gustaría enviar de esa forma a la base de datos, basta con emplear el atributo Column  y especificar el nombre, este nombre será con el que quede nuestra columna en la base de datos, así:

    public class Pais
    {
        public int Id { getset; }
        [Column("NombrePais")]
        public string Nombre { getset; }
    }

Bien, estos son algunos de los atributos de lo que podemos echar mano cuando deseemos sobrescribir alguna de las convenciones que maneja por defecto Entity Framework

Hasta el próximo post.

Anuncios
[Entity Framework] Sobre Data Annotations

2 comentarios en “[Entity Framework] Sobre Data Annotations

  1. german lopez dijo:

    hola nicologco

    tengo una idea loca y buscando por la web encontre algo que me pareceria interesante hacer.

    Bueno mi idea es que muchos documentos me gusta que los autonumere la bd pero quisiera tener control sobre esa autonumeracion en campos id y que son primary key observé que tienes el [DatabaseGenerated(DatabaseGeneratedOption.None)] para evitar que se autoenumere el id de tu clase pais, me gustaria saber si conoces que programaticamente pueda tener la opcion que se autoenumere la base de datos o que yo asigne un autonumerado via programa?

    Gracias
    german

  2. Jorge dijo:

    Hola que tal, tengo un problema necesito insetar registros a una Base de datos pero, a la hora de insertar no me deja por que es identity.

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