2013-07-19 82 views
0

我是新來的實體框架,當我創建一些示例項目時,我得到以下錯誤。實體框架模型映射表上的第一個錯誤

「實體類型'StudentSubject'未映射。」

以下是表格圖。

enter image description here

的問題是,它不產生持有很多的記錄,以學生和主題表的許多映射StudentSubject的映射。

但是,如果我引入一個新的列作爲Id到表StudentSubject並使其成爲主鍵並刪除複合主鍵然後它的工作。我想知道爲什麼會發生這種情況,而且我所採取的方式是採用模式第一種方法做到這一點。

+0

我以前有過類似的問題,但它與命名有關。該框架與單數/複數混淆的該死的東西。不要認爲這是同一個問題嗎? – melancia

回答

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; } 
} 
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"); 
      }); 
}