2011-11-15 60 views
0

我有一個名爲Address的表格的遺留數據庫。現在兩個其他表可以分配地址信息。要確定它來自哪個表,有一個SourceID字段。如果SourceID是1,那麼它與第一個表相關聯,如果它是2,則它是第二個表的地址信息。實體框架條件映射

此遺留數據庫沒有在數據庫上定義的任何外鍵約束,並且它不能被添加。

我想知道如果我使用實體框架來創建將具有此關聯的模型。在表1中可以有一個實體具有導航來解決信息(條件是SourceID = 1)並且與第二個表相同。

我試過創建了條件映射並設置了「當SourceID = 1時」我也從列映射中刪除了映射,因爲列只能映射一次。當我嘗試編譯,我得到以下錯誤:

錯誤3004:問題在映射片段開始行683:否屬性中指定映射地址組Address.SourceID。具有密鑰(PK)的實體在以下情況下不會往返:實體是類型[型號。地址]

感謝您的幫助!

回答

4

請勿使用條件映射。將您的地址映射到沒有SourceID屬性的實體,並從地址實體創建兩個派生實體。使用SourceID作爲鑑別器(TPH繼承 - 它與條件映射的工作方式相同,但您有多個具有不同鑑別器值的實體)。將第一個和第二個實體關聯到正確的地址子實體。

+1

如果我想更進一步,該怎麼辦?如果我的表上有第二個條件定義了一個類型ID會怎麼樣?我嘗試過從新類型繼承,然後添加一個新條件,使TypeId = 2。查看SQL Profiler,這不會在它創建的SQL中保留這兩個條件。有什麼辦法可以有多級TPH? –