Таблицы журнала NHibernate для отслеживания всех изменений в таблице - PullRequest
1 голос
/ 03 сентября 2010

У меня есть следующая структура БД:

Users:
- UserID
- UserName
- FirstName
- LastName
...

UsersLog:
- UserLogID
- UserID
- UserName
- FirstName
- LastName
...
- DateCreated

Таблица журнала просто вставляет запись против пользователя каждый раз, когда производится вставка или редактирование. Причина, по которой у меня есть таблица журналов, заключается в том, что при отправке заказа я могу просто зарегистрировать идентификатор журнала пользователя в соответствии с заказом, что означает, что у меня есть представление пользовательских данных во время заказа. Мне было интересно, как лучше всего это отобразить? В настоящее время я сопоставил обе таблицы, что позволяет мне сказать:

var user = new User { ... };
userRepository.Insert(user);

userLogRepository.Insert(new UserLog { User = user, UserName = user.UserName, FirstName = user.FirstName, ..., DateCreated = DateTime.UtcNow });

Моя самая большая проблема на данный момент заключается в том, что мне приходится заново добавлять каждое поле при вставке в таблицу журнала. Я знаю, что могу создать конструктор, чтобы справиться с этим, но мне было интересно, есть ли лучший способ справиться с этим. Буду признателен, если кто-нибудь сможет помочь.

Спасибо

1 Ответ

2 голосов
/ 03 сентября 2010

Если вас беспокоит код сопоставления, вы можете использовать Automapper

Ваш код будет выглядеть примерно так (это не в моей голове, но я думаю, что это правильно):

// Call on app startup, don't try to set the UserLogId field
Mapper.CreateMap<User, UserLog>()
   .ForMember(log => log.UserLogId, opt => opt.Ignore());;

// call when saving the user
userLogRepository.Insert(Mapper.Map<User, UserLog>());

В качестве альтернативы, если вам не нравится, где находится код, вы можете посмотреть, используя Audit Event Listener

...