Я настоятельно рекомендую вам ознакомиться с репозиторием и шаблонами единиц работы, эти два варианта в дополнение к универсальным репозиториям делают ваш код очень четким.
Для нахождения контекста базы данных вы можете использовать этот метод.
DbSet.Find(Object[])
Единственный верный способ получить все изменения в Таблице базы данных состоит в том, чтобы использовать, включает Сервер. Риск modifing, который Ваш собственный код для аудита изменений - то, что изменения из другого приложения/пользователя и т.д. не будут получены.
Однако я не уверен, что MySQL 4 имел триггерную поддержку.
Используйте триггер, чтобы обнаружить изменения и записать перед/после того, как значениями в таблицу журнала.
Если Вы волнуете прокрутку руки решение должное отсутствие триггерной поддержки, я настоятельно рекомендую только вывести изменения в строковом блобе. Однажды Вас попросят запросить те данные, и Вы будете волновать необходимость сделать набор строкового парсинга для возвращения данных. (Я говорю на основе опыта здесь.)
Самый простой подход должен только составить теневую контрольную таблицу, которая имеет все те же столбцы как исходная таблица плюс столбец даты изменения и последовательный идентификатор. Затем у Вас есть вся история под рукой для восстановления в любом формате, в котором Вы нуждаетесь, и можно запросить его по желанию.
Аудит SoftTree DB имеет поддержку MySQL, мог бы сделать то, что Вы после: