Claves UNIQUE al crear la base de datos con EF CTP4

Aún me cuesta trabajo nombrar esta tecnología: EF CTP4, Code-only, Code First… El famoso problema del naming sale por todas partes. Esto dificulta la búsqueda de material por internet, y eso me está pasando con este problema.

Problema: ‘Al generar automáticamente una base de datos mediante EF4 CTP, quiero que se creen algunas CONSTRAINT UNIQUE KEY’. Es bastante simple. Dicen que lo mejor para resolver un problema es ponerlo por escrito, pero esto de momento no me ha solucionado nada, la prueba es que he terminado de formularlo. ¡Cuántas veces a mitad de escribir una duda caes en la solución, o al menos en una nueva vía que aún no habías explorado, y finalmente no terminas de escribir la cuestión!

Un detalle más antes de seguir: aunque no estés generando la base de datos automáticamente, la definición de la unicidad en el modelo es ventajosa, ya que evita que algunos conflictos lleguen a la base de datos, puesto que son detectados antes en memoria (aunque sólo cuando ambas entidades duplicadas están cargadas en memoria).

Buscando al respecto de esta definición de unicidad (o UNIQUE), todas las referencias confluyen en el atributo [Key] o su equivalente fluent, el método HasKey(); aunque siempre aplicados a la PRIMARY KEY, lo cual no es el caso. Así que mi primer intento es usar HasKey() de nuevo, uno para Id y otro para la nueva clave (que por cierto es compuesta por dos campos). Pero no sirve: sólo prevalece el último HasKey, el anterior se ignora. No pueden definirse las claves únicas así.

Finalmente he encontrado la respuesta: no se puede. Visto en el blog del equipo de EF, en un comentario de Jeff informando que se añadirá la restricción de unicidad después de VS2010. Así que de momento a aguantarse. Rodeos: crear la base de datos a priori, o al menos añadir constraint después de que CodeFirst la autogenere.

Seguiremos informando.

Anuncios
Esta entrada fue publicada en EF CTP4 Codefirst y etiquetada . Guarda el enlace permanente.

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