我是实体框架的新手,当我创建一些示例项目时,我遇到了错误。
“未映射实体类型'StudentSubject'。”
以下是表格图。
问题是它没有生成StudentSubject的映射,该映射包含学生和主题表的多对多映射的记录。
但是,如果我将一个新列作为Id引入表StudentSubject并使其成为主键并删除复合主键,那么它可以工作。我想知道为什么会发生这种情况,我所做的就是在模型优先方法中做到这一点的方式。
答案 0 :(得分:1)
我建议使用流畅的api进行映射,因为命名约定有时不适合请求。
以下代码应该按照您的意愿工作;
protected override void OnModelCreating
(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(t => t.Subject)
.WithMany(t => t.Student)
.Map(m =>
{
m.ToTable("StudentSubjects");
m.MapLeftKey("StudentId");
m.MapRightKey("InstructorID");
});
}
答案 1 :(得分:1)
我无法看到您的代码,但这是我通常映射它的方式。请注意,这不需要流畅的api映射
public class Student
{
public int Id { get; set; }
public string FirstName {get; set; }
public string LastName {get; set; }
public virtual ICollection<StudentSubject> StudentSubjects { get; set; }
}
public class Subject
{
public int Id { get; set; }
public string Name {get; set; }
public virtual ICollection<StudentSubject> StudentSubjects { get; set; }
}
public class StudentSubject
{
[Key]
[Column(Order = 1)]
public int StudentId { get; set; }
[Key]
[Column(Order = 2)]
public int SubjectId{ get; set; }
public virtual Student Student { get; set; }
public virtual Subject Subject { get; set; }
}