Контроллер выше имеет стандартное редактирование ActionResult. Я просто нахожу строки в базе данных по идентификатору и обновляю их.
Перед db.SaveChanges () есть статическая функция log.Save (), которая сохраняет все изменения в модели в отдельные таблицы в базе данных.
Она просто проверяет старые и новые значения из ChangeTracker.
Проблема в том, что я хочу использовать log.Save () после db.SaveChanges (), а не раньше, чтобы убедиться, что данные действительно были сохранены.
Но после этого в ChangeTracker нет никаких изменений, поэтому log.Save () не нужно ничего сохранять.
Контроллер:
[HttpPost]
public ActionResult edit(int id, MyModel model)
{
var hihi = db.MyModel.First(s => s.ID == model.ID);
hihi.col1 = model.col1;
hihi.col2 = model.col2;
...
log.Save(Log.ChangeType.Edit, db, id);
^ Here i save changes to log.
db.SaveChanges();
return RedirectToAction("Index");
}
Класс журнала:
public void Save(ChangeType changeType, DBContext parentContext, int id)
{
DBContext db = new DBContext();
foreach (System.Data.Entity.Infrastructure.DbEntityEntry ee in parentContext.ChangeTracker.Entries())
{
foreach (string column in ee.OriginalValues.PropertyNames)
{
string oldValue = ee.OriginalValues[column].ToString();
string newValue = ee.CurrentValues[column].ToString();
if (oldValue != newValue)
{
var model = new LogModel
{
Log_Time = DateTime.Now,
Log_Operator = User.Ope_ID,
Log_Table = ee.Entity.ToString().Replace("xxx.Models.", ""),
Log_Key = id,
Log_Column = column,
Log_Type = (int)changeType,
Log_OldValue = oldValue,
Log_NewValue = newValue
};
var log = db.Log.Add(model);
db.SaveChanges();
}
}
}
}
public enum ChangeType
{
Create = 1,
Delete = 2,
Edit = 3
}
... или, может быть, у кого-то есть другой способ сохранить все изменения в базе данных в другой таблице для всех действий контроллера, поэтому после выпуска проекта я могу видеть, что делают пользователи.
PS. Я не знаю, что запускает пользователь.