我有以下课程
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; }
}
我使用以下代码配置它,我希望Subject可以有很多QuestionDescriptors
modelBuilder.Entity<QuestionDescriptor>()
.HasRequired(qd => qd.Subject)
.WithMany()
.HasForeignKey(qd => qd.SubjectId)
.WillCascadeOnDelete(true);
现在我有以下问题
如果我这样做会发生什么
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;}
}
如果我执行上述操作,我需要在配置中进行哪些更改以及为什么?
答案 0 :(得分:1)
1)我做得对吗?
是
2)我是否需要在Subject类中使用导航属性?
没有。你不需要它。它对某些查询很有帮助,但不是必需的。
3)如果我这样做会发生什么......
这是另一种关系。它代表了一对一的关系。但是因为你想要一对多的关系,你的实体必须有一个导航集合:
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来获取它们,为什么我需要它 双向属性?
你不需要它。