2011-05-25 31 views
0


我需要實現與1基類和3個子類(4類
基類溶液:用戶
子類:客戶OfficeUser員工實體框架表每次型建議需要

在我的數據庫我有只有3個表用戶,客戶端僱員
我沒有OfficeUsers表,因爲我需要的所有數據已經​​在用戶表中。
未來我希望能夠創建客戶,員工和OfficeUsers的報告數量。

我不想使用TPH,因爲我在客戶端和僱員表中有很多不可空字段。
我應該創建OfficeUsers只有UserId表,所以我可以實現TPT?
它尋找我不是很好的設計 - 只有PK表,所以我可以正確映射 - 請糾正我,如果這是做到這一點。

另一種選擇是有用戶類型科拉姆內用戶表,並以此爲鑑,但將它與TPT工作?是否有可能創建TPT與1丟失表和使用鑑別器,看起來像混合TPT和TPH,我認爲是不可能的。

在此先感謝您的答案。

編輯:

也請考慮這樣的情景:
我介紹叫MobileUser其中也有相同的字段User新類。在那種情況下,我無法知道有多少MobileUsers和多少OfficeUsers是沒有爲用戶類型引入新列的系統。
在這種情況下有2個空表(只有PK)比我在查詢表中創建依賴關係更好/更差,並且還阻止我使用一些LINQ查詢(請參閱我在Ladislav Mrnka答案下的意見)

編輯2:

有,我將不得不領域在將來添加到OfficeUser所以我開始覺得空表可以在某種程度上是一種選擇,至少C#代碼的機會(查詢)看起來更乾淨。讓我知道你是否有更好的方法。

回答

0

我認爲這僅僅是角度的問題,而不是一個建築一個......因爲你做什麼,你最終得到一個PK臺。

,您可根據OfficeUsers表,它可以包含用戶的只是PK ......只是不讓它繼承的類型。現在你有一個使用該辦公室的所有用戶的列表,你可以查詢這些列表。結構完全一樣,但思路有點不同。

如果你有多個辦公室,你會有一張帶有ID的辦公室的桌子,那麼你的OfficeUser會有它自己的類型表,因爲額外的字段將是辦公室的外鍵...給你你想要的區別。

但是,因爲你只有(我認爲)有一個辦公室,你不需要一個外鍵,所以你只需要一張桌子來容納使用辦公室的用戶......這是「一半,一半其他十幾種「,無論您選擇哪種方式,都是完全一樣的。

這就是爲什麼我會用自己的直覺去你的第二編輯,你以後可能會添加更多的字段,所以你不妨做一個「空」型......因爲無論哪種方式,你會落得一個只存儲PK的表格。

0

如果您的OfficeUserUser完全相同,那麼您不需要任何額外的類。使用User,而不是OfficeUser和派生類EmployeeClient

+0

@ ladislav-mrnka我在想那個,但是我不能使用像'where用戶是OfficeUser'或者'from entities.Users.OfType ()'這樣的查詢。要找出OfficeUsers的數量,我將不得不讓所有用戶不是客戶或員工 – Lucas 2011-05-25 10:48:38

+0

是的,這是真的。你將不得不使用'其中(x =>!(x是員工))' – 2011-05-25 10:51:20

+0

@拉吉斯拉夫 - mrnka是啊,當我介紹了新表,如'MobileUser'我必須修改查詢,以確保它包括另一表(在這種情況下3「不是」where語句中的語句)。你認爲這個解決方案比爲* OfficeUser *創建空表更好嗎? – Lucas 2011-05-25 10:55:50