2012-04-23 66 views
2

我有兩個類,客戶端作者,這都是從成員派生。他們沒有增加任何東西成員,但我更喜歡有單獨的語義類和可能的後來擴展類。我區分基於角色,其中一個作者會員有一個AuthorRole會員和客戶一個會員具有ClientRole成員。使用具有鑑別器列的普通香草TPH映射排除成員同時是客戶端作者如何將兩個類映射到同一個表,沒有歧義列?

我可以看到解決的唯一方法,這是有一個ClientRepositoryAuthorRepository做映射,用一無所知任何繼承我的分貝範圍內,但在這裏我採取的性能損失,因爲如ClientRepository將不得不查詢成員實例並將其映射到客戶端實例。

有沒有其他方法可以做到這一點?

回答

0

EF中的TPH映射表明,客戶端是成員,作者是成員,但永遠不會有成員是客戶端和作者。甚至不可能有會員將角色從客戶轉移到作者,反之亦然。

如果要將兩個派生類存儲在同一個表中,則必須使用TPH和鑑別器。英孚將確保遵守上述規定。如果這些規則中的任何一個在您的場景中無效繼承對您來說是一個糟糕的設計,因爲即使.NET也不允許您將實例的類型從客戶端更改爲成員。

如果您想保留當前的設計,您將不得不使用客戶端存儲庫和附加級別的映射到您的自定義類,因爲EF無法通過關係驅動TPH繼承。在EF中,這種繼承不能存在,因爲您可以更改關係,但不能更改已創建實例的類型。

+0

我說「阻止成員既是客戶又是作者」,你說不,我錯了,但是「從來不會有成員是客戶和作者」。這正是我所說的,我怎麼會錯? 我已經與映射,因爲你說EF無法處理這個,謝謝你確認該部分。 – ProfK 2012-04-23 21:45:16

+0

對不起,這是我的英語問題 - 我無法正確理解你的描述。我修改了答案。 – 2012-04-23 21:58:43

+0

沒問題,謝謝。 – ProfK 2012-04-24 04:33:49

相關問題