2011-01-25 111 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查詢。

喜歡的東西:

[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; } 
} 

現在你可以寫類似的查詢:

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

但是,你真的不應該做手工這一點。