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”도 키가 필요합니다. 물론이 문제를 코딩 할 수 있지만 좋은 데이터베이스 디자인은 아닙니다.
답변
ActivityID
및 ActivityName
속성을 모두 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 });