【发布时间】:2012-03-18 08:26:30
【问题描述】:
首先,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; }
}
我相信这是解决此问题的“OOP 正确方法”。然而,似乎总是会发生这样的事情:
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;}吗? -
在您的一对多关系中,看起来您只代表“多”部分。例如,
Department有员工,但Employee没有Department。Employee应该有一个Department属性,以便您可以轻松获取 Employee's Department。
标签: c# oop class coding-style