2011-05-02 97 views
0

我在我的應用程序中使用標準的ObjectContext和EntityObjects。假設我的兩個表是項目&服務。項目包含子項目(從項目表與ParentID == ProjectID)以及服務。所以我會有像Projects-> Subprojects-> Services這樣的層次結構。但是我需要從抽象基類繼承項目和服務,這樣我就可以在我的應用程序中使用這些實體中的任何一個作爲新的任務/作業實體。然後,例如,我可以創建列出所有任務(項目或服務)的TreeList。無論如何,在EDMX設計器中,我可以創建一個新類型(實體),它是兩個或更多具體類型的基礎。實體框架自底向上繼承

回答

1

這是可能的TPC繼承,但它包括了很多複雜的你的設計。例如:

  • 你將不得不共享屬性移到基類
  • 你可能會手動維護一些映射在EDMX(至少我有,當我做了截圖的樣品)
  • 你將有隻有單一ObjectSet<Tasks>,你將不得不使用OfType僅查詢項目或服務
  • ,你將不得不使用唯一的ID每Task =在這兩個項目與服務表(可在數據庫中正確配置的身份來實現)

它看起來像:

enter image description here

在你的實體對象,而不是父類的另一種選擇是使用接口。您可以在實體對象的部分部分中定義接口,並且您可以自己檢索項目和服務,只要您的UI只需要實現您的接口的類型列表即可。

+0

界面選項似乎在我的情況下效果更好,因爲我希望能夠以多種形式直接查詢項目和服務。感謝您的全面回答。 – Hoss 2011-05-02 19:51:43

0
+0

我不知道這是否對我有幫助。我在數據庫中沒有我的基本實體(我不想創建它)。我需要的只是一個新的抽象基類或接口,以告訴項目和服務(它們處於父子關係中)可以被視爲任務類型。我想用POCO或新的DbContext API我可以做到這一點;我只是不確定如何用EntityObjects做到這一點。 – Hoss 2011-05-02 19:39:06

+0

它的確如此,這就是爲什麼它是每個具體類型的表而不是每種類型的表。 – 2011-05-03 22:24:33

0

因爲它聽起來像你的數據從2個獨立的表,ProjectsServices來,不,我不認爲你可以在設計實現這一目標(至少不無手動編輯生成的EDMX)。如果有一個共同的表來表示基類,那可以在設計器中完成,但這聽起來不像它適合你的情況。

您可以做的是使用接口而不是抽象基類,並在實體模型中使用分部類實現每個實體的接口。您不能直接從實體模型中的抽象基類繼承,因爲所有實體都已從EntityObject派生。如果您的基類中有很多共享實現,那麼切換到POCO可能是值得的,您可以在其中定義自己的繼承層次結構。

+0

這就是我所需要的。我很愚蠢,我從來沒有嘗試過錯誤的假設,它不會工作!謝謝。 – Hoss 2011-05-02 19:47:15