2012-03-21 8 views
3

誰かが間違っている箇所を指摘できますか?コード最初のエンティティフレームワーク多対多の関係

多対多の関係を持つ2つの単純なクラスを作成しました。うまく動作、すべてのテーブルが正しく読み込まれます。私が試してみて、何も返されません任意の生徒のコースをretrive場合を除き...

public partial class Student 
{ 

    public Student() 
    { 
     Courses = new HashSet<Course>(); 
    } 

    public int StudentID { get; set; } 

    [StringLength(50)] 
    [Required] 
    public string FirstName { get; set;} 

    [StringLength(50)] 
    [Required] 
    public string LastName {get; set;} 

    public DateTime? Enroled {get;set;} 

    public ICollection<Course> Courses { get; set; } 


} 

public class Course 
{ 

    public Course() 
    { 
     Students = new HashSet<Student>(); 
    } 
    public int CourseID { get; set; } 

    [StringLength(30)] 
    [Required] 
    public string CourseTitle { get; set; } 

    [StringLength(255)] 
    public string CourseDesc { get; set; } 

    public ICollection<Student> Students { get; set; } 
} 

    public ContextDB() 
     : base (@"Data Source=.\SQLEXPRESS;Initial Catalog=CollegeDB;Integrated Security=True") 
    { 

    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Course>().HasMany(c=>c.Students).WithMany(p => p.Courses) 
      .Map(
      m=> { 
       m.MapLeftKey("Course_CourseID"); 
       m.MapRightKey("Student_StudentID"); 
       m.ToTable("CourseStudents"); 
      }); 
    } 

    public DbSet<Student> Students { get; set; } 
    public DbSet<Course> Courses { get; set; } 


} 



      var students = db.Students.ToList(); 

      foreach (Student s in students) 
      { 
       Console.WriteLine("{0} {1}", s.FirstName, s.LastName); 
       foreach (Course c in s.Courses.ToList()) 
       { 
        Console.WriteLine("{0}", c.CourseTitle); 
       } 
      } 

答えて

8

あなたが遅延ロードを使用している場合は、仮想、

public virtual ICollection<Course> Courses { get; set; } 

としての性質をdefiineする必要があるとしたい場合に使用することができます

var students = db.Students.Include(s=>s.Courses).ToList(); 

、ロード熱心 http://codetuner.blogspot.com/2011/07/entity-framework-differed-loading-lazy.html

+0

おかげで今正常に動作します! – Karb

+6

@ Karb:答えに残っている白いチェックマークをクリックすることで答えを受け入れることができます。答えがあなたの問題を解決したことを示します。 – Slauma

+0

これで私は猥褻な時間を節約できました。私はカップルのコレクションをバーチャルにするのを忘れて、それをチェックすることさえ考えなかった。 – lintmouse

関連する問題