Я потратил некоторое время на чтение нескольких постов и статей об отслеживании аудита, но все еще не могу понять это.
Мне нужна довольно простая система аудита, которая даст мне такие результаты, как:
- Клиент "Джон Доу" удален пользователем "
- Клиент "Jane Doe" создан "Other User"
- Адрес пользователя "John Doe" был изменен пользователем "
- Клиент "Джейн Доу" был удален "другим пользователем"
Я попытался переопределить событие SaveChanges в dbContext, но застрял со следующей проблемой:
public override int SaveChanges()
{
foreach (DbEntityEntry<IAuditable> entry in ChangeTracker.Entries<IAuditable>())
{
if (entry.State == EntityState.Added)
{
// since the object was not added yet, if I write to log in here and
// for some reason SaveChanges fail, I will end up with a fake log entry
}
else if (entry.State == EntityState.Modified)
{
// same in here
}
}
return base.SaveChanges();
// here the state for all entries have changed to Unchanged or Detached.
// detached is probably the one that was deleted however the “Unchanged”
// could be new or modified records.
}
Я знаю, что мог бы использовать триггеры в базе данных для достижения этой цели, но я бы хотел оставить ее здесь, чтобы иметь больше контроля над ней, так как я не SQL-парень и после развертывания приложения у меня не будет так много контроля над БД.
Я уверен, что мне здесь не хватает чего-то очень простого.
Я ценю любую помощь.
Заранее спасибо.