Ассоциация наследования с Entity Framework
Рассмотрим, например, мою следующую модель базы данных.
- UserTable (идентификатор, имя пользователя)
- TextContentTable (Id, Name, Description, CreatedByUserId, ModifiedByUserId, TextContent)
- ImageContentTable (Id, Имя, Описание, CreatedByUserId, ModifiedByUserId, ImageContent)
Я хотел бы создать следующую объектную модель. Но возможно ли это вообще? Например:
- BaseEntity (Id)
- DescriptiveEntity (Имя, Описание): BaseEntity
- TrackedEntity (CreatedBy, ModifiedBy): DescriptiveEntity
- Пользователь (Имя пользователя): BaseEntity
- TextContent (Text): TrackedEntity
- ImageContent (Изображение): TrackedEntity
Я надеюсь, что вы понимаете мою нотацию, но возможно ли сопоставить ассоциации (выделенные жирным шрифтом) с отдельными таблицами TextContentTable & ImageContentTable?
Спасибо заранее.
1 ответ
Я не уверен, что этот подход является такой хорошей идеей в текущей версии Entity Framework. Когда тип, такой как TextContent, наследует от типа, подобного BaseEntity, он должен иметь ту же сущность, что и базовый тип. С помощью стратегии, изложенной в вопросе, все сущности в вашем приложении будут иметь одинаковый набор сущностей. Я не уверен, что это то, что вы хотите.
Тем не менее, вы можете получить почти такой же эффект через интерфейсы. Например, у вас может быть интерфейс IEntity, который предоставляет свойство id. Другой интерфейс, ITrackedEntity, может предоставлять CreatedBy и ModifiedBy. И т.п.
Это не идеально, но для нас это более чем достаточно. Мы фактически используем codegen через шаблоны T4 для их реализации.
Следующая версия Entity Framework может иметь функции, облегчающие реализацию этого шаблона наследования без единого набора объектов.