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

C# 对象取决于另一个对象-何时加载其属性,c#,sql-server,oop,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)加

想象一类员工:

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)加载的,DAL是另一个独立的类

后来我决定我需要另一个属性,即员工的部门,但是部门本身是一个巨大的类别,因为它有自己的属性。因此,我最终为它制作了一个课程:

class Department
 {
  public string DepartmentID { get; set;}
  public string CostCenter { get; set; }
  public bool hasManager { get; set; }
  //more code
  //constructor for department
 }
因此,我从上面更改了employee类,以包含一个部门的实例:

public class Employee {
  //existing code for an employee above PLUS the below
  public Department d { get; set; }
}
现在我很好,我有一个employee类,它有一个与之相关的部门。当我调用DAL类为我的员工获取数据时,这可以在SQL查询中返回实际的部门。因此,我可以轻松分配班级部门的
部门ID
。但是何时/如何分配Department类的所有其他属性


此外,CostCenter、hasManager等的属性都存储在数据库层中。如果我最初只收到部门ID,我是否应该再次致电DAL班级以获取该部门的所有相关信息?如果是这样的话,我应该在哪里调用它呢?我不认为从我的部门构造函数调用DAL类是个好主意。我知道我可以在两个表之间创建一个关系,从部门获取相关信息,然后在employee构造函数中实例化我的部门。但是employee类有很多属性,已经有很多字段从数据库返回,因此如果我这样做,我的构造函数可能会越来越大……

好吧,您可以选择

我假设您有自己的DAL beacuse EF和Linq2Sql,并为此提供了内置选项

  • 急切加载-将人员加载到部门
  • 按需加载:
    if(p.d==null).
  • 延迟加载:在
    d
    属性的getter中执行按需加载
    我想我明白你的意思了,我会进一步调查的。