Я занимаюсь разработкой приложения ASP.NET на C #.
У меня есть две таблицы базы данных Food (Id, Name, Description) и FoodLog (Id, FoodId, FoodName, FoodDescription, ChangedFields, Date) . Как видно из названия, FoodLog сохраняет историю изменений, сделанных пользователями, в Food записях и указывает в поле ChangedFields , какие поля были изменены по сравнению с предыдущими «версия» записи.
Для отображения пользователю определенной записи Food я использую элемент управления DetailsView . Когда пользователь нажимает кнопку Update , выполняется UpdateCommand , связанная с SQLDataSource . UpdateCommand просто изменяет соответствующую запись Food.
Чтобы добавить новую запись в таблицу FoodLog , мне нужно перехватить событие, запускаемое DetailsView при обновлении. Когда я ловлю это событие, я вручную сравниваю запись, вставленную пользователем (еще не зафиксированную в БД), с записью в таблице Food , соответствующей ее Id, чтобы отслеживать измененные поля и сохранять их в поле ChangeFields в таблице FoodLog. Теперь для выполнения этой задачи я могу использовать два события, сгенерированные DetailsView
ItemUpdated : запускается после выполнения UpdateCommand . это
как я теряю отслеживание измененных полей, потому что предыдущий
«версия» записи уже перезаписана.
ItemUpdating : запускается до выполнения UpdateCommand .
Таким образом, у меня все еще есть старая «версия» записи в БД, и я
Можно сделать сравнение, а затем dtore в таблице FoodLog. тем не мение
если тогда UpdateCommand не удается по какой-то причине у меня есть запись в
журнал, который не соответствует изменению в таблице Food.
Кто-нибудь может помочь с этой проблемой? Можно ли написать два разных выражения SQL в UpdateCommand ?
Спасибо