Композитный ключ с кодом EF 4.1 первым - PullRequest
104 голосов
/ 29 марта 2011

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

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

как определить составной ключ?

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

 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» также было ключом.Конечно, я могу обойти это, но это не очень хороший дизайн базы данных.

Ответы [ 2 ]

186 голосов
/ 29 марта 2011

Вы можете пометить свойства 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; }

}
105 голосов
/ 29 марта 2011

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

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