2012-10-03 85 views
8

我需要使用繼承EF4和從數據庫創建的TPH模型。
我創建了一個新的測試簡單類的projet。 還有就是我的類模型:EF4和多個抽象層次

enter image description here

還有就是我在SQL Server 2008中的表:

VEHICLE 
    ID : int PK 
    Owner : varchar(50) 
    Consumption : float 
    FirstCirculationDate : date 
    Type : varchar(50) 
    Discriminator : varchar(10) 

我在EDMX增加了一個條件對鑑別領域來區分滑板車,租車,摩托車和自行車實體。

機動車輛和車輛是摘要。

但是,當我編譯時,出現這樣的錯誤:

錯誤3032:問題在映射片段起始於線78, 85:EntityTypes EF4InheritanceModel.Scooter,EF4InheritanceModel.Motorbike, EF4InheritanceModel.Car,EF4InheritanceModel。自行車正在映射 到表Vehicle中的相同行。映射條件可用於區分這些類型映射到的行。

編輯:
要拉吉斯拉夫:
我嘗試和誤差變化,成爲它所有的實體:

錯誤3034:問題在映射片段開始在線路72, 86:一個實體被映射到同一個表內的不同行。確保這兩個映射片段不會將具有重疊鍵的兩個>實體組映射到兩個不同的行組。

要亨克(與Ladislay建議):
有所有的映射細節: enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

有什麼不對?

謝謝

+0

你可以發佈一些映射細節?主要是關於歧視者。 –

+0

嘗試爲抽象類添加一些鑑別器值。 –

+0

謝謝,但不起作用。看到我的帖子,我解釋了它。 有關信息,如果我刪除MotorizedVehicle和車輛的抽象屬性,它的工作。但我需要的是抽象的。 – Cedric

回答

1

EF4不處理這些問題。你可以用鑑別器來完成,但這些類需要是非抽象的。你必須使用另一種方法,如代碼分析或測試,以確保基類永遠不會被實體框架以外的任何其他實例化。

或者,您可以升級到EF6。我不確定它是否會更好地支持它,但它肯定會更好地處理模型層次結構,從而允許更好的支持模型的更好的數據庫模式。