web-dev-qa-db-fra.com

Clé composite avec code EF 4.1 en premier

J'essaie de comprendre comment avoir une clé composite en utilisant le code EF First 4.1 RC.

Actuellement, j'utilise l'annotation de données [Key], mais je ne peux pas spécifier plus d'une clé.

comment spécifier une clé composite?

Voici mon exemple:

 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; }

}

J'ai besoin du "ActivityName" pour être aussi une clé. Bien sûr, je peux coder autour de cela, mais ce n'est pas une bonne conception de base de données.

104
bugnuker

Vous pouvez marquer les propriétés ActivityID et ActivityName avec l'annotation Key ou vous pouvez utiliser une API fluide comme décrit par @taylonr.

Modifier:

Cela devrait fonctionner - la clé composite définie avec des annotations nécessite un ordre de colonne explicite:

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; }

}
186
Ladislav Mrnka

Nous n'utilisons pas les annotations, mais plutôt le constructeur du modèle. Dans ce cas, vous pouvez faire quelque chose comme:

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