У меня есть таблица событий, цель которой - хранить действия, выполненные пользователями веб-сайта. Действие в основном изменяет или создает новую строку в таблице 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 ...
Спасибо