[ef-code-first] EF 4.1 코드가 먼저 포함 된 복합 키

EF 코드 First 4.1 RC를 사용하여 복합 키를 갖는 방법을 알아 내려고합니다.

현재 [Key] Data Annotation을 사용하고 있지만 둘 이상의 키를 지정할 수 없습니다.

복합 키를 어떻게 지정합니까?

내 예는 다음과 같습니다.

 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”도 키가 필요합니다. 물론이 문제를 코딩 할 수 있지만 좋은 데이터베이스 디자인은 아닙니다.



답변

ActivityIDActivityName속성을 모두 Key주석으로 표시하거나 @taylonr에서 설명한대로 유창한 API를 사용할 수 있습니다.

편집하다:

이것은 작동합니다. 주석으로 정의 된 복합 키에는 명시적인 열 순서가 필요합니다.

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

}


답변

주석을 사용하지 않고 대신 모델 작성기를 재정의합니다.이 경우 다음과 같은 작업을 수행 할 수 있습니다.

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


답변