Ассоциация наследования с Entity Framework - PullRequest
0 голосов
/ 12 мая 2009

Рассмотрим, например, мою следующую модель базы данных.

  • UserTable (Id, Username)
  • TextContentTable (идентификатор, имя, описание, CreatedByUserId, ModifiedByUserId, TextContent)
  • ImageContentTable (Id, имя, описание, CreatedByUserId, ModifiedByUserId, ImageContent)

Я хотел бы создать следующую объектную модель. Но возможно ли это вообще? Например:

  • BaseEntity (Id)
  • DescriptiveEntity (Имя, Описание): BaseEntity
  • TrackedEntity ( CreatedBy , ModifiedBy ): DescriptiveEntity
  • Пользователь (Имя пользователя): BaseEntity
  • TextContent (Текст): TrackedEntity
  • ImageContent (изображение): TrackedEntity

Надеюсь, вы понимаете мою нотацию, но возможно ли сопоставить ассоциации (выделенные жирным шрифтом) с отдельными таблицами TextContentTable & ImageContentTable?

Спасибо заранее.

1 Ответ

1 голос
/ 13 мая 2009

Я не уверен, что такой подход является хорошей идеей для текущей, поставляемой версии Entity Framework. Когда тип, такой как TextContent, наследует от типа, подобного BaseEntity, он должен иметь ту же сущность, что и базовый тип. С помощью стратегии, изложенной в вопросе, все сущности в вашем приложении будут иметь одинаковый набор сущностей. Я не уверен, что ты этого хочешь.

Однако вы можете получить почти такой же эффект через интерфейсы. Например, у вас может быть интерфейс IEntity, который предоставляет свойство id. Другой интерфейс, ITrackedEntity, может предоставлять CreatedBy и ModifiedBy. И т.д.

Это не идеально, но для нас это более чем достаточно. На самом деле мы используем codegen через шаблоны T4 для их реализации.

Следующая версия Entity Framework может иметь функции, облегчающие реализацию этого шаблона наследования без единого набора сущностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...