Композитный ключ с 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 });