首先,EF不是我们开发环境的选项,所以请不要提供“只需使用EF”答案...
我认为这是一个相当标准的困境,所以我相信大多数专业人员都有一种方法来解决它,我只是还没有碰巧找到...所以我希望你们能够向我展示它是什么。
假设您有以下数据库表:
tblCompanies
ID
NAME
tblDepartments
ID
COMPANY_ID
NAME
tblEmployees
ID
DEPARTMENT_ID
FIRSTNAME
LASTNAME
如何在代码的类中最好地表示这个问题?
我认为最好的方式是这样的:
public class Company
{
public int ID { get; set; }
public string Name { get; set; }
public List<Department> Departments { get; set; }
}
public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public List<Employee> Employees { get; set; }
}
public class Employee
{
public int ID { get; set; }
public string FirstName { get; set;}
public string LastName { get; set; }
}
我认为这是"面向对象编程的正确方法",然而经常发生以下情况:
public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public int CompanyID { get; set; }
public List<Employee> Employees { get; set; }
}
主要是因为当你从数据库中仅获取部门时,你只会得到公司ID,而没有其他属性来完整填充公司类的实例。
(这里我使用了一个相对简单的例子,但我目前处理的项目有3个字段用于将数据链接在一起,所以在几个类中拥有相同的3个字段对我来说似乎是错误的想法)
对于这些情况,是否有最佳实践?虽然我不喜欢因懒惰而在多个类中存储相同的数据,但我也不喜欢返回只填充了一个字段的类实例,因为那是我当时拥有的全部信息。
Company DepartmentCompany {get; set;}
? - Paolo FalabellaDepartment
有Employees
,但是Employee
没有Department
。Employee
应该有一个Department
属性,这样你就可以轻松地获取员工所在的部门。 - Makotosan