2017-02-28 60 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>