Я подключил регистрацию в моем приложении, чтобы автоматически регистрировать изменения в определенных объектах, используя прослушиватели событий.Это прекрасно работает, но для некоторых свойств внутри сущностей, которые я регистрирую, я не хочу вставлять журнал, если в это свойство вносится только изменение.Эти свойства украшены атрибутом IgnoreLoggingAttribute.Вот что у меня есть:
public void OnPostUpdate(PostUpdateEvent @event)
{
var session = @event.Session.GetSession(NHibernate.EntityMode.Poco);
if (@event.Entity is User)
session.SaveOrUpdate(new UserLog((User)@event.Entity));
...
}
@event предоставляет 2 свойства, которые называются State и OldState.Я могу использовать это для проверки изменений, однако я не могу вытащить интересующие меня свойства, так как это просто массивы объектов.Я подумал, что мог бы использовать некоторое отражение, чтобы получить все индексы (для любых свойств с IgnoreLoggingAttribute) и сопоставить их с теми, что в массиве объектов.До сих пор я придумал:
var properties = typeof(User).GetProperties().Where(p => p.GetCustomAttributes(typeof(IgnoreLoggingAttribute), false).Count() > 0);
Проблема сейчас в том, что она не дает мне индекс свойства по отношению к исходной сущности.Мне также нужно убедиться, что это соответствует соответствующему индексу из свойств @ event.State и @ event.OldState (которые, похоже, игнорируют определенные свойства).