Складений ключ із кодом EF 4.1


105

Я намагаюся розібратися, як скласти ключ за допомогою коду 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" також був ключовим. Звичайно, я можу кодувати це, але це не гарний дизайн бази даних.

Відповіді:


186

Ви можете позначити обидва ActivityIDта ActivityNameвластивості за допомогоюKey анотацією або використовувати текучий API, як описано в @taylonr.

Редагувати:

Це повинно працювати - складений ключ, визначений з анотаціями, вимагає явного порядку стовпців:

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

}

Я бачу. Дякую за оновлення. Позначено як відповідь.
bugnuker

1
Все-таки додати унікальні обмеження / покажчики, які насправді не є ключами?
Шиммі Вайцхандлер

105

Ми не використовуємо примітки, замість цього ми переосмислюємо конструктор моделей, і в цьому випадку ви можете зробити щось на кшталт:

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

це справді працює, але я сподіваюся на анотацію, яка працює. Були зразки з CTP 4, але вони більше не працюють в 4.1 RC
bugnuker

3
Я знаю, що ви шукали анотації, але думав, що це може допомогти в пошуку ... як я сказав, що ми не використовуємо анотації, тому я там не дуже допомогла ... сподіваюсь, ви знайдете відповідь
taylonr

14
Мені подобається такий підхід. Зберігає модель чистою від проблем Контексту. Дякую.
ctorx

Хтось знає, чи встановлення складеного первинного ключа за допомогою вільних api працює для SQL CE? Це не працює для мене (дає помилку, що в 'EntityType ... немає ключа визначений'), і я не впевнений, створити нове запитання чи ні.
kasitan

Якщо ви знущаєтесь над своїм DbContext з метою тестування одиниць, як ви переконаєтесь, що modelBuilder виконаний для визначення взаємозв'язку між сутностями та / або складеними первинними ключами?
Джим Ахо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.