Складений ключ із кодом 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.