2011-01-25 114 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"); 

但是,你真的不应该做手工这一点。