Свойства навигации как первичные ключи

#c# #entity-framework #navigation-properties

#c# #entity-framework #навигация-свойства

Вопрос:

Я использую EF 6 с MVC 5. У меня есть класс, определенный следующим образом:

 public class ConEdSignup
{
    [Key, Column(Order = 0)]
    public virtual ApplicationUser Attendee { get; set; }
    [Key, Column(Order = 1)]
    public virtual ConEdSession ConEdSession { get; set; }
    [Required]
    public DateTime SignupTime { get; set; }
    [Required]
    public bool Attended { get; set; }
}
  

По сути, это таблица ссылок для отношений «многие ко многим», где у меня есть дополнительные свойства для этих отношений. Когда я пытаюсь создать миграцию для этого, она выдает ошибку «Модели.ConEdSignup: : EntityType ‘ConEdSignup’ не имеет определенного ключа. Определите ключ для этого EntityType.»

Я четко определил ключи для этого, но ему это не нравится. Как я могу использовать эти свойства навигации в качестве первичных ключей?

Ответ №1:

Я полагаю, это связано с тем, что вы выбрали сложные объекты в качестве ключей. Вам также необходимо определить примитивы, которые действуют как внешние ключи для этих объектов.

Комментарии:

1. Да, это действительно работает, если я делаю это таким образом. Я просто надеялся, что мне не придется их определять, так как я не хочу, чтобы примитивы отображались как свойства класса.

2. Насколько я знаю, вы должны. Вот как работает EF, и он выполняет некоторые из своих волшебных функций, например, как он облегчает отложенную загрузку.

Ответ №2:

Вы должны прочитать эту статью о MSDN :-

http://msdn.microsoft.com/en-gb/data/jj679962.aspx

В нем также объясняются соглашения, которых придерживается Entity Framework. Также объясняется, как создавать собственные пользовательские соглашения.

Вам необходимо настроить свои классы определенным образом, чтобы EF распознал, чего вы пытаетесь достичь.