2012-05-09 3 views
2

난 그냥 엔터티 프레임 워크를 시작하고 뭔가 오해 것으로 보인다. 기본적으로 데이터베이스를 이미 설정했습니다. 다음은 내 테이블이라고 가정 해 봅시다.EF 코드 첫 번째 여러 테이블을 단일 엔터티

**Employees** 
EmployeeId 
CubeId (FK to Cubes table) 
NameId (FK to Name table) 

**Cubes** 
CubeId 
CubeName 

**Person** 
NameId 
FirstName 
LastName 

다음과 같이 쓸 수 있습니다. SELECT EmployeeId, CubeId, CubeName, FirstName, LastName FROM Employees LEFT OUTER JOIN Cubes LEFT OUTER JOIN Person. 따라서 모든 직원을 반환합니다. 기본적으로, EF Code First에서는 모든 테이블에 대한 클래스를 생성해야합니까? 그렇지 않다면 LEFT OUTER 동등 물을 어떻게 생성합니까? 내가 찾은 모든 예제는 탐색 속성을 사용하여 테이블에서 테이블로 이동합니다 (즉, 클래스에서 클래스로).

답변

3

모델 :

public class Employee 
{ 
    [Key] 
    public int EmployeeId {get;set;} 
    public int CubeId {get;set;} 
    [ForeignKey("Cube")] 
    public int NameId {get;set;} 
    [ForeignKey("Name")] 

    public virtual Cube Cube {get;set;} 
    public virtual Name Name {get;set;} 
} 

public class Cube 
{ 
    [Key] 
    public int CubeId {get;set;} 
    public string CubeName {get;set;} 
} 

public class Name 
{ 
    [Key] 
    public int NameId {get;set} 

    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

귀하의 상황에 맞는 :

public class YourContext:DbContext 
{ 
    public DbSet<Name> Names {get;set;} 
    public DbSet<Cube> Cubes {get;set;} 
    public DbSet<Employee> Employees {get;set;} 
} 

질문 :

YourContext db = new YourContext(); 
var query = db.Employees.Where(x => x.EmployeeId == id).Select(x => new 
{ 
    EmployeeId = x.EmployeeId, 
    CubeId = x.Cube.CubeId, 
    CubeName = x.Cube.CubeName, 
    FirstName = x.Name.FirstName, 
    LastName = x.Name.LastName 
}).FirstOrDefault(); 

이 신분증을 가지고 첫번째 직원을 찾습니다 (또는 아무것도 존재하지 않는 경우는 null를 돌려됩니다) , 그리고 언급 한 모든 속성을 가진 형식을 만듭니다. 성이 필요한 경우 다음을 사용하여 액세스하십시오 :

string lastName = query.LastName;

+0

그렇다면 모든 테이블에 대해 모델을 만들어야한다고 말하는 것입니까? 그렇다면 이미 존재하는 데이터베이스에 대해 코드 우선을 사용하는 것은 무엇입니까? 메타 데이터를 사용하여 추출 할 수 있습니다. – Dan

+0

이름 "코드 우선"이이 모든 것을 말합니다. 목표는 코드를 처음 작성하는 수단을 제공하는 것이며 코드는 데이터베이스를 작성합니다. 이미 데이터베이스가 있다면 솔루션에 데이터베이스를 추가하고 일부 TT를 사용하여 POCO 클래스를 생성하십시오 (NuGet을 사용하여 얻을 수 있음). Code First는 데이터를 손상시킬 수있는 변경 사항이 아닌 경우 코드 내에서 데이터베이스를 변경하는 이점을 제공합니다. –

+0

Entity Framework Power Tools를 다운로드하면 Visual Studio에서 마우스 오른쪽 단추를 클릭하여 Reverse Engineer 코드를 먼저 사용할 수 있습니다. –

관련 문제