#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 распознал, чего вы пытаетесь достичь.