在ASP.NET MVC C#中连接多个表或连接两个表

时间:2017-02-28 18:01:55

标签: c# sql asp.net-mvc linq

如果标题令人困惑,请抱歉。

假设我有一个名为Employee的模型。 Employee有一个名为Departments的列。这允许他们查看该部门的日历。但是一些员工应该能够查看多个部门的日历,而且每个员工都有所不同。

因为有许多不同的部门,我不希望每个部门的Employee表都填充了大量的新列。

我看到了关于链接(不确定这是否是正确的词)的两个表格。所以我创建了第二个名为AdditionalDepartments的模型/表,其中包含AdditionalDepartmentsId,EmployeeId和Department。

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

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

和AdditionalDepartments看起来像......

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

我如何组合这些?或者有更好的方法来存储其他部门信息而不是两个表吗?

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

注意:我不能从Employee中删除Department,因为它的用途远远超过AdditionalDepartments的用途。

2 个答案:

答案 0 :(得分:1)

您希望Employee模型的IEnumberable<Department>包含员工所属的所有部门。

在某种程度上不相关的说明中,如果您能够更改表模式,则可以删除第一个表中的“部门”列,并使第二个表格成为与员工关联的部门列表。 employeeID列(它们将具有外键关系)。

很抱歉,如果我误解了您的问题,但除非您将一个数据库作为单一模型,否则这应该适合您。

答案 1 :(得分:1)

将您的第一个表格列更改为官方部门。在第二个表格中,删除“附加”表格。并将其留作部门。添加&#39; IT&#39;在这张桌子上为Joe&#39;同样。然后使用下面的语句将SQL输出到模型中的List<Departments>并根据需要使用。

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