У вас есть три варианта:
1 - Таблица по иерархии :
Хорошо для производительности, так как требуется одна физическая таблица. Вам нужно будет добавить поле дискриминатор к Person - например, "PersonType". Проблема с этим подходом (что я обнаружил) в том, что у вас в конечном итоге будет много пустых полей, а навигационные свойства между производными типами сложны (по моему опыту).
2 - Таблица по типу :
Требует отдельных таблиц, но хорош для гибкости, если вы хотите другой другой тип "Person".
3 - Тип таблицы на бетон : с этим не сталкивался, поэтому не могу комментировать. AFAIK это очень похоже на TPT.
Я бы, наверное, пошел с TPT, просто потому что это проще IMO.
При этом, однако, поля в таблицах «Подрядчик» и «Сотрудник» относятся к одному и тому же типу, поэтому вы можете обобщить это как одно поле с TPH. Но я предполагаю, что это не полная модель.
Шаги для первой модели:
- Добавьте эти три объекта в пустой EDMX.
- Пометить "Персона" как абстрактную
- Установите «Подрядчик» и «Сотрудник» как производные от «Персона». (Добавить -> Наследование)
- Удалите поля идентификаторов из сущностей «Сотрудник» и «Подрядчик» (не требуется - он унаследует идентификатор от «Персона»).
- Создание базы данных из модели.