Как использовать NLog / Log4Net для автоматизации отслеживания изменений в базе данных? - PullRequest
0 голосов
/ 03 июня 2009

Мне известны многие методы аудита таблиц. Некоторые из них основаны на триггерах и требуют аудита триггеров для каждой таблицы. У меня есть ограничение, основанное на типе столбца. Как я могу использовать каркас журналирования, такой как NLog или Log4Net. Я хочу, чтобы мой журнал (в таблице) отвечал на вопрос "Кто обновил этот столбец этой таблицы с val0 до val1 в это время?"

Я еще не определился с оператором OR. Наклон в сторону NHibernate или EF.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 04 июня 2009

Если вы используете шаблон, подобный DAO (я успешно использую его в Java с Hibernate), вы можете добавить запись для каждого изменения в базе данных. Если вы используете Spring.NET , вы можете использовать AOP для добавления перехватчиков к методам доступа к базе данных DAO.

В любом случае, вы можете добавить специальный appender для пакета DAOs, потому что он будет очень многословным.

1 голос
/ 04 июня 2009

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

Если вы сопоставляете столбцы таблицы со свойствами объекта и полями с разными именами, то, я думаю, вы будете пытаться проанализировать информацию sql, чтобы определить, какой столбец был обновлен. Например, если вы изменили значение «Product.Price» и оно фактически отображается в столбце с именем «final_price», ваша запись не будет точно соответствовать событиям в базе данных.

Также это может быть неправильно, но если вы работаете с отключенными объектами через пакет ORM, я не уверен, будет ли доступна информация отслеживания изменений. Я смутно помню проблему, о которой читал, когда один из перечисленных ORM обновлял каждый столбец, поэтому казалось, что пользователь изменил все столбцы в таблице, когда они действительно обновили один столбец.

...