Clave compuesta con código EF 4.1 primero


105

Estoy tratando de averiguar cómo tener una clave compuesta usando el código EF First 4.1 RC.

Actualmente, estoy usando la Anotación de datos [Clave], pero no puedo especificar más de una clave.

¿Cómo se especificaría una clave compuesta?

Aquí está mi ejemplo:

 public class ActivityType
{
    [Key]
    public int ActivityID { get; set; }

    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

Necesito que "ActivityName" también sea una clave. Claro, puedo codificar esto, pero ese no es un buen diseño de base de datos.

Respuestas:


186

Puede marcar las propiedades ActivityIDy ActivityNamecon una Keyanotación o puede usar una API fluida como lo describe @taylonr.

Editar:

Esto debería funcionar: la clave compuesta definida con anotaciones requiere un orden de columna explícito:

public class ActivityType
{
    [Key, Column(Order = 0)]
    public int ActivityID { get; set; }

    [Key, Column(Order = 1)]
    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

Veo. Gracias por actualizarme. Marcado como respuesta.
bugnuker

1
De todos modos, ¿agregar restricciones / índices únicos que no son realmente claves?
Shimmy Weitzhandler

105

No usamos las anotaciones, sino que anulamos el generador de modelos, en cuyo caso puede hacer algo como:

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });

esto funciona, pero espero una anotación que funcione. Hubo muestras con CTP 4, pero ya no funcionan en 4.1 RC
bugnuker

3
Sé que estaba buscando anotaciones, pero pensé que esto podría ayudar en la búsqueda ... como dije, no estamos usando anotaciones, así que no fui de mucha ayuda allí ... espero que encuentre la respuesta
taylonr

14
Me gusta este enfoque. Mantiene el modelo limpio de preocupaciones de contexto. Gracias.
ctorx

¿Alguien sabe si la configuración de la clave primaria compuesta usando una api fluida funciona para SQL CE? No funciona para mí (da un error de que 'EntityType ... no tiene una clave definida') y no estoy seguro de crear una nueva pregunta o no.
kasitan

Si se burla de su DbContext con fines de prueba unitaria, ¿cómo se asegura de que se ejecute modelBuilder para definir la relación entre entidades y / o claves primarias compuestas?
Jim Aho
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.