Я отслеживаю все изменения , внесенные в объекты, чтобы пользователь мог просмотреть и откат для любой предыдущей версии любого элемента в базе данных ,
Таблица базы данных history выглядит следующим образом:
Item | ItemId | Field | WhenChanged | OldValue | NewValue
customer | 6 | LastName | 2009-12-31 13:00:04 | Sanders | Sanders-Smith
customer | 5 | FirstName | 2009-12-31 12:11:14 | Jym | Jim
В настоящее время я записываю эти изменения всякий раз, когда пользователь заполняет форму , поэтому у меня есть полная информация о старом и новом состоянии объекта.
Однако теперь мне нужно сделать доступным ведение журнала исторических данных из код . Он должен работать прозрачно при использовании LINQ-to-SQL , то есть разработчику не нужно выполнять никакой дополнительной работы, то есть следующий код должен вызывать запись в таблицу истории а также:
using (var db = Datasource.GetContext())
{
var customers = from c in db.Customers
where c.Status == "waiting"
select c;
foreach(var customer in customers)
{
customer.Status = "finished";
}
}
db.SubmitChanges();
Я могу представить, что могу сделать это двумя способами:
- переопределить db.SubmitChanges () , но тогда возникает вопрос, как мне получить доступ к объектам, ожидающим изменений.
- присоединить мой метод регистрации к событию OnSubmitChanges , но я пока не смог найти решение этой проблемы
Кто-нибудь когда-нибудь работал над этой проблемой или знает хороший подход к ее решению?