Entity Framework код первых отношений и свойства навигации? - PullRequest
0 голосов
/ 01 октября 2011

у меня есть следующие классы

public class Subject{
        public int SubjectId { get; set; }
        public String SubjectName { get; set; }
        public String SubjectCategory { get; set; }
    }

public class QuestionDescriptor {
        public int QuestionDescriptorId { get; set; }        
        public String QuestionText { get; set; }
        public String Answer { get; set; } 
        public int SubjectId { get; set; }
        public virtual Subject Subject { get; set; }
    }

я настроил его, используя следующий код, я хочу, чтобы у субъекта было много дескрипторов QuestionDescriptors

 modelBuilder.Entity<QuestionDescriptor>()
                .HasRequired(qd => qd.Subject)
                .WithMany()
                .HasForeignKey(qd => qd.SubjectId)
                .WillCascadeOnDelete(true);

Теперь у меня есть следующий вопрос

  1. правильно ли я это сделал?
  2. мне нужно свойство навигации в классе Subject?
  3. что произойдет, если я сделаю это

    public class Subject {
            public int SubjectId { get; set; }
            public String SubjectName { get; set; }
            public String SubjectCategory { get; set; }
            public int QuestionDescriptorId {get;set;}
            public virtual QuestionDescriptor {get;set;} 
        }
    
  4. если я делаю вышеупомянутое, какие изменения мне нужны в конфигурации и почему?

  5. если я хочу, чтобы все вопросы относились к определенной теме, тогда яможно получить их с помощью запроса QuestionDescriptor, зачем тогда мне нужно двунаправленное свойство?

1 Ответ

1 голос
/ 01 октября 2011

1) правильно ли я это сделал?

Да.

2) мне нужно свойство навигации в классе Subject?

Нет. Тебе это не нужно. Это может быть полезно для определенных запросов, но это не обязательно.

3) что произойдет, если я сделаю это ...

Это другое отношение. Это будет представлять отношения один-к-одному. Но поскольку вы хотите, чтобы отношения «один ко многим», у вас должна быть навигация collection в вашей сущности:

public class Subject {
    public int SubjectId { get; set; }
    public String SubjectName { get; set; }
    public String SubjectCategory { get; set; }
    public virtual ICollection<QuestionDescriptor> Descriptors {get;set;} 
}

4) если я сделаю выше, какие изменения мне нужны в конфигурации и почему?

Для вышеуказанного изменения вы можете оставить конфигурацию отображения как есть - с единственным исключением, что теперь вы должны указать коллекцию как другую сторону отношений. Вместо .WithMany() вы используете

.WithMany(s => s.Descriptors)

5) если я хочу получить ответы на все вопросы, относящиеся к определенной теме, я могу получить их, запросив QuestionDescriptor, зачем тогда мне нужно двунаправленное свойство?

Тебе это не нужно.

...