实体框架模型在映射表上的第一个错误

时间:2013-07-19 12:46:44

标签: entity-framework ado.net

我是实体框架的新手,当我创建一些示例项目时,我遇到了错误。

“未映射实体类型'StudentSubject'。”

以下是表格图。

enter image description here

问题是它没有生成StudentSubject的映射,该映射包含学生和主题表的多对多映射的记录。

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

2 个答案:

答案 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; }
}