En ocasiones, nuestro modelo de datos debe asegurar que respetará ciertas restricciones que aseguren los requisitos establecidos. Unique Keys que definen que serán únicas y no nullables, Foreign Keys que no puedan ser nullables, etc.
En este post vamos a ver como crear Unique Indexes. Esto quiere decir que la propiedad o propiedades que estén asignadas a este indice, serán únicas en la tabla.
Un ejemplo. Tengo una tabla de “User”. La tabla User tiene su Id, nombre y apellidos.
La restricción única en este caso seria que no pueden haber dos usuarios con el mismo nombre y apellido en su conjunto. Es decir:
FirstName= “Jorge”; LastName= “Perez”; OK
FirstName= “Jorge”; LastName= “Martinez”; OK
FirstName= “Javier”; LastName= “Perez”; OK
FirstName= “Jorge”; LastName= “Perez”; ERROR
Este tipo de restricciones hay gente que lo mete en su capa de negocio, siendo un error, porque no asegura esta restricción en el modelo de datos, donde en este caso debería estar.
Por tanto, vamos a ver como crear estas restricciones Unique Index en Entity Framework 6.1 usando Fluent API.
Para una propiedad:
En este caso se definiría que no pueden haber en la tabla dos users con el mismo FirstName.
1 2 3 4 |
modelBuilder .Entity<User>() .Property(t => t.FirstName) .HasColumnAnnotation(IndexAnnotation.AnnotationName, new IndexAnnotation(new IndexAttribute()))); |
Para varias propiedades:
Quizá este es el caso más usado en nuestras aplicaciones. En este caso que dos campos, FirstName y LastName sean únicos en su conjunto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
modelBuilder .Entity<User>() .Property(t => t.FirstName) .IsRequired() .HasMaxLength(60) .HasColumnAnnotation( IndexAnnotation.AnnotationName, new IndexAnnotation( new IndexAttribute("IX_FirstNameLastName", 1) { IsUnique = true })); modelBuilder .Entity<User>() .Property(t => t.LastName) .IsRequired() .HasMaxLength(60) .HasColumnAnnotation( IndexAnnotation.AnnotationName, new IndexAnnotation( new IndexAttribute("IX_FirstNameLastName", 2) { IsUnique = true })); |
Javi Giner
Latest posts by Javi Giner (see all)
- IIS Express Visual Studio, como configurar para permitir conexiones remotas - febrero 26, 2016
- Evento solidario sobre Innovación - diciembre 14, 2015
- Uso de Component en Unity - noviembre 10, 2015