Я работаю с устаревшей системой, которая реализует TPH для определенного количества элементов. Итак, текущая структура выглядит так:
Abstract Class 1 Abstract Class 2 Abstract Class 3
| | |
--------- --------- ---------
| | | | | | | | |
T1 T2 T3 T4 T5 T6 T7 T8 T9
Таким образом, Type (T *) является дискриминатором для всех таблиц, но поскольку определенные типы имеют общие столбцы, существует значительное количество разных таблиц. Проблема в том, что все эти предметы фактически имеют небольшую общность, но нет возможности собрать все эти элементы в коллекцию. На самом деле иерархия на самом деле должна выглядеть больше.
--------------- Base Abstract 1 ----------
| | |
Abstract Class 1 Abstract Class 2 Abstract Class 3
| | |
--------- --------- ---------
| | | | | | | | |
T1 T2 T3 T4 T5 T6 T7 T8 T9
Итак, у нас есть TPT, где каждая таблица для каждого типа является TPH. Для примера в реальном мире, вот что нам нужно.
--------------- Vehicle ---------------
| | |
Car Boat Plane
| | |
--------- --------- ---------
| | | | | | | | |
BMW Toyota Fiat T4 T5 T6 T7 T8 T9
Очевидно, что есть некоторые недостатки дизайна с первоначальным дизайном, и никто не ожидал, что должен захватить список всех автомобилей без запроса трех разных таблиц. Поэтому мой вопрос заключается в том, что с существующей структурой есть способ добавить эту новую иерархию в структуру сущности. Я думал что-то вроде этого
Vehicle
-------
VehicleId
TypeId (Boat, Plane, Car, etc)
ItemFK (BoatID, PlaneId, CarId)
Возможно ли это? Есть ли способ сопоставить их в структуре сущностей? Кажется, я не могу их правильно подобрать. Кажется, что это могло бы работать, если бы мы заменили BoatId, PlaneId и CarId с помощью VehicleId (например Условное сопоставление в платформе Entity Framework - ИЛИ с помощью TPH), но в этот момент мы бы сделали действительно инвазивное изменение схемы, которое на самом деле не вариант, и я не уверен, что это даже сработает. По сути, мне нужен способ сопоставления существующих ключей с новой иерархией. Любая помощь приветствуется. Я в недоумении и не могу найти решения, которое отвечает на мой вопрос.