1

假設我有一個表+類A,另一個表+類AType表示不同類型的A,以及從A繼承的表+類B在實體框架中合併類型表和表繼承

B是某種類型的A,但它太複雜了,無法在數據級別與其他類型的A相匹配,並且需要在模式級別擁有它自己的表格 - 並且它是自己的類別。

B仍然是一個類型的A,所以我想在AType創紀錄的代表B,並申請在A記錄,實際上是B s到指向紀錄ATypetype。我也希望能夠添加更多從A繼承的表格+類,並且使它們的PK具有硬編碼。

現在,如果我直接使用SQL,我會爲A的繼承者創造記錄,並將負值作爲他們的PK。這樣一來,在數據層面增加了新的AType,它們具有肯定的PK,決不會與硬編碼的模式層次相沖突,作爲一個很好的獎勵,我可以很容易地判斷A中的哪些記錄是硬類型,哪些是柔軟的類型 - 無需看AType

我是新來的實體框架,所以我不想在我嘗試傳統方式之前應用黑客風格的解決方案。那麼在Entity Framework中處理這個問題的約定是什麼?

+0

如果你有3種不同的類型,你會怎麼做? – podiluska 2012-08-07 14:34:48

+0

@podiluska:什麼是負數不是「A」記錄的PK - 它是AType記錄的'PK'(當然還有'A'記錄中的'type'字段)。所以,如果我有3種不同的硬性類型,我可以給他們PK'-1','-2'和'-3'。我擁有硬式PK的全部負面範圍 - 我可以擁有儘可能多的數量。 – 2012-08-07 14:40:29

+0

類型表是否包含數據或元數據或兩者的混合? – 2012-08-08 10:47:57

回答

0

如果您想遵循您奇怪的方法,您必須手動處理鍵值 - 您將獲得與SQL中相同的結果,但它會非常容易出錯(特別是由於併發性)。它也不會產生你期望的漂亮的SQL,因爲EF不會理解隱藏在關鍵值中的邏輯,所以即使你試圖查詢A,它也會加入所有派生表,以查找哪些記錄實際上只是A - 這就是EF處理TPT繼承。

+0

我知道解決方案是駭人聽聞的 - 我描述它來幫助描述問題。如果有更傳統的方式來做我所需要的,那就更好了。 – 2012-08-07 18:58:35