0

我是实体框架的新手,在创建一些示例项目时出现以下错误。

" 实体类型 'StudentSubject' 未映射。"

下面是表格图。

在此处输入图像描述

问题是它没有为 StudentSubject 生成映射,它保存了学生和主题表的多对多映射的记录。

但是,如果我将一个新列作为 Id 引入表 StudentSubject 并使其成为主键并删除复合主键,那么它就可以工作。我想知道为什么会发生这种情况,并且我所做的方式是在模型优先方法中做到这一点的仪式方式。

4

2 回答 2

1

我建议使用 fluent 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");
            });
}
于 2013-07-19T13:33:52.777 回答
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; }
}
于 2013-07-19T13:53:40.487 回答