对象取决于另一个对象 - 何时加载其属性

时间:2011-10-13 13:58:28

标签: c# sql-server oop

想象一下一类员工:

public class Employee
 {
   public int ID { get; set; }
   public string FirstName { get; set; }
   public Employee(int ID, string FirstName)
       {
         this.ID = ID;
         this.FirstName = FirstName;
       }
 }

员工的数据是从数据访问层(DAL)加载的,这是另一个单独的类。

后来我决定我需要另一个属性,即员工的部门,但是该部门本身就是一个巨大的类别,因为它有自己的属性。所以我最终为它上课:

class Department
 {
  public string DepartmentID { get; set;}
  public string CostCenter { get; set; }
  public bool hasManager { get; set; }
  //more code
  //constructor for department
 }

然后我从上面更改我的员工类以包含部门的实例:

public class Employee {
  //existing code for an employee above PLUS the below
  public Department d { get; set; }
}

所以现在我很好我有一个与之相关的部门的员工班。当我调用我的DAL类来获取我的员工的数据时,这可以返回SQL查询中的实际部门。所以我可以轻松地分配班级的DepartmentID。但是何时/如何分配Department类的所有其他属性。

此外,CostCenter,hasManager等的属性都存储在数据库层中。如果我最初只回到DepartmentID,我应该再次调用DAL类来获取该部门的所有相关信息吗?如果是这样我应该在哪里调用它,我不认为从我的部门构造函数调用DAL类是个好主意。我知道我可以在我的两个表之间建立关系并从部门获取相关信息,然后我可以在员工构造函数中实例化我的部门。但是员工类有很多属性已经有很多字段从数据库返回,所以如果我这样做,我的构造函数可能会变得越来越大......

1 个答案:

答案 0 :(得分:1)

嗯,你有选择......

我假设您有自己的DAL,因为EF和Linq2Sql都有内置的选项。

  1. 急切加载 - 将人员加载到部门。
  2. 按需加载:if (p.d == null) ...
  3. 延迟加载:在d属性的getter内进行按需。