Clé composite avec code EF 4.1 en premier


105

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 [Clé], 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 que "ActivityName" soit également une clé. Bien sûr, je peux coder autour de cela, mais ce n'est pas une bonne conception de base de données.

Réponses:


186

Vous pouvez marquer les propriétés ActivityIDet les ActivityNamepropriétés avec une Keyannotation ou vous pouvez utiliser une API fluide comme décrit par @taylonr.

Éditer:

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

}

Je vois. Merci de m'avoir mis à jour. Marqué comme réponse.
bugnuker

1
Quoi qu'il en soit pour ajouter des contraintes / index uniques qui ne sont pas vraiment des clés?
Shimmy Weitzhandler

105

Nous n'utilisons pas les annotations, à la place nous remplaçons le générateur de modèle, auquel cas vous pouvez faire quelque chose comme:

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

cela fonctionne, mais j'espère une annotation qui fonctionne. Il y avait des échantillons avec CTP 4 mais ceux-ci ne fonctionnent plus dans 4.1 RC
bugnuker

3
Je sais que vous cherchiez des annotations, mais j'ai pensé que cela pourrait aider dans la recherche ... comme je l'ai dit, nous n'utilisons pas d'annotations, donc je n'ai pas beaucoup aidé là-bas ... j'espère que vous trouverez la réponse
taylonr

14
J'aime cette approche. Garde le modèle propre des préoccupations liées au contexte. THX.
ctorx

Quelqu'un sait-il si la définition de la clé primaire composite à l'aide d'une API fluide fonctionne pour SQL CE? Cela ne fonctionne pas pour moi (donne une erreur indiquant que «EntityType ... n'a pas de clé définie») et je ne suis pas sûr de créer une nouvelle question ou non.
kasitan le

Si vous vous moquez de votre DbContext à des fins de test unitaire, comment vous assurer que le modelBuilder est exécuté afin de définir la relation entre les entités et / ou les clés primaires composites?
Jim Aho
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.