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