2011-01-25 3 views
0

이 두 엔티티가 있습니다. 종업원에 대한 하나의 :엔티티 설계의 외래 키 관계

[Table(Name = "Employees")] 
public class Employee 
{ 
    [HiddenInput(DisplayValue = false)] 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
    public int UserID { get; set; } 

    [Column] 
    [Required(ErrorMessage = "Please enter a first name")] 
    [DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [Column] 
    [DisplayName("Last Name")] 
    [Required(ErrorMessage = "Please enter a last name")] 
    public string LastName { get; set; } 

    [Column] 
    [DisplayName("Department")] 
    [Required(ErrorMessage = "Please select a department")] 
    public int DepartmentID { get; set; } 
} 

및 부서에 대한 하나 내 데이터베이스에서

[Table(Name = "Departments")] 
public class Department 
{ 
    [HiddenInput(DisplayValue = false)] 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
    public int DepartmentID { get; set; } 

    [Column] 
    [Required(ErrorMessage = "Please enter a department name")] 
    public string Name { get; set; } 
} 

, 나는 DepartmentID에이 두 테이블 사이에 외래 키 관계를 가지고있다. 그러나 제 엔티티 클래스에는이 것을 지정하는 것이 없습니다.

이 수업에 뭔가를 추가해야합니까?

답변

2

왜 엔티티 클래스를 직접 생성 하시겠습니까? (왜 sqlmetal.exe 및/또는 .dbml 파일을 사용하지 않습니까?) 클래스를 직접 작성하는 것은 방법이 아닙니다. LinqToSql이 엔티티 정의 방법에 오류가있을 때 정말 끔찍한 예외 메시지를 제공하기 때문입니다.

그러나 질문에 대답하려면 예, [Association] 특성이 누락되었습니다. (sqlmetal.exe가 생성했을 것입니다.)이 기능이 없으면 테이블/관계에서 작동하는 LINQ 쿼리를 쉽게 작성할 수 없습니다. 같은

뭔가 :

db.Employees.Where(x => x.Department.Name == "Accounting"); 

그러나, 당신이 정말로 손으로이 일을해서는 안 :

[Column] 
[DisplayName("Department")] 
[Required(ErrorMessage = "Please select a department")] 
public int DepartmentID { get; set; } 

private EntityRef<Department> department; 

[Association(IsForeignKey = true, ThisKey = "DepartmentId"] 
public Department Department 
{ 
    get { return department.Entity; } 
    set { department.Entity = value; } 
} 

지금과 유사한 쿼리를 작성할 수 있습니다.