【发布时间】:2012-03-25 10:48:31
【问题描述】:
我正在尝试 MVC 2、ADO.NET EF 和 POCO。我已经使用 POCO 生成器在单独的库中生成了我的实体类。这些 POCO 实体用作 ViewPages(不确定这是否是正确的设计方法,还是我需要单独的 ViewModels 类?)
现在,如果我需要添加一个员工对象(与部门主管相关)的简单场景,那么在层之间传输这些对象的推荐方法应该是什么。
应用程序的分层结构有点像这样:
我已经想到了各种替代方案:
我在员工控制器中有一个名为 AddEmployee() 的方法,它接受 FormCollection 作为参数。在表单集合中,我得到发布的数据,例如员工姓名、年龄、工资等以及所选部门的 ID。
1.) 一种方法是我可以创建另一个 DTO,例如 EmployeeDepartment DTO,它将用于按原样映射来自 FormCollection 的值。然后我可以在经理层打破它们并使用它们来创建实体对象,即员工对象,并通过类似于以下的查询来引用部门:
e.Department = Department.where(i => i.deptId == empDepDto.dept_id).first()
我不是这方面的忠实拥护者,并且觉得每次涉及到关系时,我都必须添加一个 DTO,然后将其映射到我的实体类。
2.) 第二个可能是最糟糕的,即将每个对象作为参数传递,然后将它们耦合到管理层。
3.) 按原样使用 POCO,在控制器层创建 Employee 对象和 Deparment 对象并传递 POCO 对象
public void AddEmployee(FormCollection formCollection)
{
Department d = new Deparmtent; d.id = ""; //based on the dropdown value
d.name="" //based on the dropdown selected text;
Employee e = new Employee; e.Name. e. sal....
e.Department = d;
EmployeeManager.AddEmployee(e);
}
但我认为在经理层,我仍然需要使用 LINQ 重新创建对部门的引用,这又是重复的,似乎不是一个干净的解决方案。
有没有更好的方法来处理这个问题?寻找建议和最佳做法。
【问题讨论】:
标签: asp.net .net asp.net-mvc asp.net-mvc-2 poco