Entity Framework Полиморфизм - PullRequest
1 голос
/ 09 апреля 2010

Мне нужна была помощь в попытке реализовать простые полиморфные отношения с использованием Entity Framework.

Пример отношения, которое я хотел бы реализовать:

Комментарий Таблица

  • ItemType ('Видео', 'Пользователь')
  • ItemID
  • Body

Видео имеет много комментариев

Пользователь имеет много Комментарии

Понятия не имею, лучший способ сделать это, я из образа мышления Ruby on Rails.

Ответы [ 3 ]

3 голосов
/ 09 апреля 2010

Это не требует полиморфизма (наследования).

Вы правильно указали: Видео имеет Комментарии. Наследование потребует: Видео - это комментарий .

1 голос
/ 10 апреля 2010

Ваш основной выбор: -

1. Наследование Модели Videos и Users как подклассы Items либо: -

1,1. Наследование таблиц на класс (одна таблица для видео, другая для пользователей)

1.2 Наследование таблиц на иерархию (одна таблица, которая содержит видео и пользователей вместе (некоторые поля скрыты для некоторых типов)

Я предлагаю вам посмотреть таблицу на класс и таблицу на иерархию для Entity Framework.

2. Использование общих интерфейсов (например, ICommentableObject <..>, ICommentableObjectContext <...>) Это позволяет вам иметь отдельные таблицы Video, User, Comment и FKrelationships для VideoComment и UserComment (и в целом для любых других таблиц, которые вы хотите комментировать).

Это выполнимо, но это очень комплекс. Например, у меня есть реализация ITaggable, которая может применять теги к любому ObjectContext и любым объектам в нем, которые поддерживают данный интерфейс - но это было нелегко.

0 голосов
/ 09 апреля 2010

На мой взгляд, вы должны моделировать БД следующим образом:

Таблица:

Предметы (ItemID, ItemType, Body)

Пользователи (UserID, ...)

Комментарии (CommentID, ItemID, UserID)

Тогда у вас не должно быть проблем с отношениями между вашими сущностями.

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