Композитный ключ с EF 4.1 Code First

Я пытаюсь выяснить, как иметь составной ключ, используя EF-код First 4.1 RC.

В настоящее время я использую аннотацию данных [Key] Data, но я не могу указать более одного ключа.

как указать составной ключ?

Вот мой пример:

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

}

Мне нужно "ActivityName" также быть ключом. Конечно, я могу создать код вокруг этого, но это не очень хороший дизайн базы данных.

Ответ 1

Вы можете отметить как свойства ActivityID, так и ActivityName с помощью аннотации Key или вы можете использовать свободный API, как описано в @taylonr.

Edit:

Это должно работать - составной ключ, определенный с аннотациями, требует явного порядка столбцов:

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

}

Ответ 2

Мы не используем аннотации, вместо этого мы переопределяем конструктор моделей, и в этом случае вы можете сделать что-то вроде:

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