Можно ли сделать это сопоставление с (свободно) NHibernate? - PullRequest
1 голос
/ 28 ноября 2008

У меня есть таблица событий, цель которой - хранить действия, выполненные пользователями веб-сайта. Действие в основном изменяет или создает новую строку в таблице X. Это позволит мне сохранить историю всех действий, выполненных пользователем. Таким образом, События содержат:

  • столбец первичного ключа
  • текст для описания события (например: «опубликовал комментарий»)
  • столбец дискриминатора, если необходимо
  • столбец внешнего ключа в другую таблицу A
  • столбец внешнего ключа для другой таблицы B
  • ....
  • столбец внешнего ключа в другой таблице N

В строке таблицы «События» будет установлен только один из столбцов внешнего ключа, все остальные будут нулевыми (поэтому все они могут иметь значение NULL). Таблица ведет себя как таблица косвенности к фактической таблице, связанной с событием. Я не знаю, нужен ли дискриминатор, поскольку вся информация содержится в столбцах внешнего ключа. Таблицы от A до N могут быть чем угодно. При необходимости их класс модели предметной области может иметь общий интерфейс (IEventRecordable).

Мой вопрос: Возможно ли сопоставление между таблицей Events и классом Event? Это особенно выполнимо с беглым nhibernate? Можно ли это сделать, не создавая много производных классов Event (я не хочу создавать так много пустых подклассов)? Класс Event в идеале должен выглядеть следующим образом:

public class Event
{
    public virtual int Id { get; set; }
    public virtual IEventRecordable ActualEvent { get; set; }
    public virtual string EventDescription { get; set; }
    DateTime EventDateTime { get; set; }
}

Многие классы из классов модели домена могут реализовывать IEventRecordable (который в основном является пустым интерфейсом). Это может быть таблица User или таблица BlogComment ...

Спасибо

1 Ответ

2 голосов
/ 03 декабря 2008

Если вы забудете о нескольких столбцах внешнего ключа, вы можете сделать это mapping .

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