2012-07-06 3 views
1

엔티티 프레임 워크를 배우려고합니다. 말, 나는이 작품을 잘엔티티 프레임 워크 및 클래스

using (CourseDBContext a = new CourseDBContext()) 
{ 
    var b = from c in a.Course 
      where c.CourseID == 1001 
      select c; 

    var d = b.FirstOrDefault(); 
    if(d != null) 
    Console.WriteLine(d.CourseName); 
} 

아래와 같이 다음과 같은 클래스

class Course 
{ 
    [Key] 
    public virtual int CourseID {get; set;} 
    public virtual string CourseName {get; set;} 
} 
class CourseDBContext:DBContext 
{ 
    public DbSet<Course> Courses{get;set;} 
} 

가 그럼 난 데이터베이스를 조회 할 Linq를 사용할 수 있습니다. 지금은 추가하면

이제
class Assignment 
{ 
    [Key] 
    public virtual int CourseID {get; set;} 
    public virtual int StaffID {get; set;} 
} 
class AssignmentDBContext:DBContext 
{ 
    public DbSet<Assignment> Assignments{get;set;} 
} 

가, 어떻게 Linq에이 = 1001 CourseID과 관련된 CourseName 및 StaffID을 선택하고 표시하는 데 사용할 수있는 두 번째 클래스? 위 예제는 인위적이므로 테이블 디자인과 필드는 부적합합니다. Entity Framework 및 Linq를 사용하여 두 개의 다른 데이터베이스 테이블에서 두 클래스 사이의 데이터를 쿼리하는 방법을 알고 싶습니다.

감사합니다.

+1

'DbSet' 대신'IDbSet'을 사용하는 것이 좋습니다. EF는 계속 동일하게 작동하지만 나중에 코드를 테스트 할 수있게 해줍니다. IDbSet을 컨텍스트에서 조롱 할 수 있기 때문입니다. 나는 왜 모든 Microsoft의 예제가 IDbSet 대신 DbSet을 사용하는지 이해하지 못했습니다 ... – CodingWithSpike

+0

@ rally25rs Thanks. IDbSet을 사용하여 살펴 보겠습니다 –

+0

도움이된다면 Gist의 단위 테스트 용 DB를 시뮬레이트하기 위해'List'를 사용하는 가짜'iDbSet' 구현이 있습니다 : https://gist.github.com/1492134 그 코드는 제 MVC 프로젝트에 많이 있습니다. 내 DbContext도 인터페이스로 만든 다음 조롱 된 컨텍스트에서 위조 된 IDbSets를 사용합니다. – CodingWithSpike

답변

3

두 엔티티 모두 동일한 컨텍스트에 있어야합니다.

public class CoursesContext: DbContext 
{ 
    public DbSet<Assignment> Assignments {get; set;}  
    public DbSet<Course> Courses {get; set;} 
} 
당신은 외래 키를 필터링하기 위해 할당 탐색 속성을 추가 할 수 있습니다

:

public class Course 
{ 
    [Key] 
    public virtual int CourseID {get; set;} 
    public virtual string CourseName {get; set;} 
    public virtual Assignment {get; set;} 
} 

는 그런 다음과 같이 조회 할 수 있습니다

var staffId = 
     from c in a.Course 
     where c.CourseID == 1001 
     select c.Assignment.StaffID; 
1

를위한 별도의 컨텍스트를하지 마십시오 각 DbSet. 예.

class MyDbContext : DBContext 
{ 
    public DbSet<Course> Courses{get;set;} 
    public DbSet<Assignment> Assignments{get;set;} 
}