2017-02-28 62 views
1

对不起,如果标题混淆。连接到多个表或在ASP.NET MVC C中连接两个表#

可以说我有一个叫做Employee的模型。员工有一个名为Departments的列。这使他们能够查看该部门的日历。但是一些员工应该能够查看多个部门的日历,并且每个员工都有所不同。

因为有很多不同的部门,我不想让Employee表充满每个部门的大量新列。

我看到了一些关于链接(不知道这是否是正确的词)两个表。于是我创建了第二个名为AdditionalDepartments的模型/表,它具有AdditionalDepartmentsId,EmployeeId和Department。

说乔是部门A的一部分,但也可以查看B和C.这就是员工的样子。

EmployeeId | name | Department 
------------------------------- 
    1  | Joe | IT 

和AdditionalDepartments会是什么样子......

AdditionalDepartmentsId | EmployeeId | Department 
-------------------------------------------------- 
     1    |  1  | HR 
     2    |  1  | Sales 

我将如何去组合这些?还是有更好的方式来存储更多的部门信息,而不是两个表?

我问,因为在我看来,当他们创建或编辑员工时,他们使用员工数据库,但我希望能够在这些视图上设置其他部门。问题在于你每个视图只能使用一个模型,所以我遇到了困难。

注意:我不能从员工中删除该部门,因为它的使用量远远超过了AdditionalDepartments的使用量。

+1

您在正确的轨道上创建AdditionalDepartments。您可以从Employee表中删除Department。您可以调用AdditionalDepartments表的部门。您需要创建一个主键(Employee.EmployeeId)到外键(AdditionalDepartments.EmployeeId)关系。 – kblau

+0

@kblau我不相信EmployeeID可以成为主键,因为多次列出时它不再是唯一的。 – Ethilium

+0

“问题在于你每个视图只能使用一个模型,所以我遇到了困难。”为什么不使用视图模型? – Tim

回答

1

您希望员工模型拥有一个IEnumberable<Department>,其中包含员工所属的所有部门。

在一个稍微不相关的说明中,如果您有能力根本改变表格模式,那么您可以在第一个表格中删除部门列,并使第二个表格成为基于employeeID列(他们将有一个外键关系)。

对不起,如果我误解了你的问题,但除非你将一个数据库作为一个单一的模型,这应该为你做的伎俩。

+0

我会研究一下。从第一张表中删除部门专栏的问题是我们需要知道他们是“正式”的一部分。他们为该部门工作,但由于他们与其他部门密切合作,他们也需要为他们查看日历。将它留在第一张桌子上可以让他们做更多的事情,而第二张桌子只能让他们查看其他部门的日历。 –

+0

如果员工只保留相关的员工信息,则可以在部门表中添加一个用于区分“官方”部门的位域。 – kblau

+0

@Ethilium的答案很好,如果你不能对该表进行任何重大改变。 –

1

将您的第一个表格列更改为类似于OfficialDepartment的内容。在你的第二个表格中,放下'Additional'并将它作为Departments停用。为'Joe'添加'IT'也是如此。然后使用以下语句将SQL输出到List<Departments>中并根据需要使用。

select A.Departments as [Departments] 
from Employees E 
join Departments D on E.EmployeeId = D.EmployeeId 
where E.EmployeeId = <empId>