Я знаю, что этот вопрос давным-давно, но я потратил много времени на исследование аналогичной проблемы в недавнем приключении с EF 5.0 (и 6.0.0-бета1), и эта статья привела меня к правильное решение. Спасибо автору.
У меня сложная иерархия, сопоставленная с использованием TPH:
- A1 - B1 - C1
- A1 - B1 - C2
- A1 - B2 - C3
- A1 - B2 - C4
- A1 - B2 - C5
- A1 - B2 - C6 - D1 - E1
- A1 - B2 - C6 - D1 - E2
- A1 - B2 - C6 - D1 - E3
- A1 - B2 - C6 - D2 - E4
- A1 - B2 - C6 - D2 - E5
- A1 - B2 - C6 - D2 - E6
- A1 - B2 - C6 - D3 - E7
- A1 - B2 - C6 - D3 - E8
- A1 - B2 - C6 - D3 - E9
Где полужирный обозначает абстрактный, а курсив обозначает дополнительные сопоставления, специфичные для этого класса (и подклассов), к той же таблице (конечно).
В основном решение состояло в том, чтобы создать 4 столбца дискриминатора в таблице и сопоставить каждый уровень в иерархии с другим столбцом дискриминатора. Обратите внимание, что абстрактные классы на уровне B и ниже также должны отображаться и иметь определенное значение дискриминатора.
На это было потрачено много времени, все примеры и документация по TPH, похоже, охватывают только основы. В реальном мире все становится немного сложнее!
Надеюсь, это кому-нибудь поможет.