У меня есть таблица событий, цель которой - хранить действия, выполненные пользователями веб-сайта. Действие в основном изменяет или создает новую строку в таблице X. Это позволит мне хранить историю всех действий, выполненных пользователем. Таким образом, События содержат:
Строка в таблице событий будет иметь только один из установленных столбцов внешнего ключа, все остальные будут иметь значение NULL (поэтому все они допускают значение NULL). Таблица ведет себя как косвенная таблица к реальной таблице, связанной с событием. Я не знаю, нужен ли дискриминатор, поскольку вся информация содержится в столбцах внешнего ключа. Таблицы от A до N могут быть любыми. При необходимости их класс модели предметной области может иметь общий интерфейс (IEventRecordable).
У меня вопрос: Возможно ли сопоставление между таблицей событий и классом событий? Это особенно возможно с беглым спящим режимом? Можно ли это сделать без создания множества производных классов 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 ...
Спасибо





Если вы забыли о нескольких столбцах внешнего ключа, вы можете сделать это <any> отображение.
Тогда это действительно должно называться «Разговорный NHibernate». :)