Я разрабатываю систему, в которой у пользователя есть формы для заполнения, и эта информация хранится в базе данных. На одном из экранов у меня есть следующий поток:
- Внутри проекта он может добавить несколько заказов.
- Каждый добавленный заказ открывает экран конфигурации, на котором можно установить внутреннюю информацию заказа. Также есть возможность добавлять позиции в заказ.
- Каждый добавленный элемент открывает экран конфигурации, который позволяет пользователю установить внутреннюю информацию.
Подводя итог, поток выглядит следующим образом: Проект -> Заказ -> Элемент, где «A -> B» означает, что A содержит 0, 1 или более B.
Этот проект разрабатывается с использованием WPF с Entity Framework для управления доступом к базе данных. Я связываю объекты из базы данных Entity, отображая их непосредственно на экранах. Таким образом, у нас есть некоторые «преимущества» с WPF, например, ненулевые поля окрашены в красный цвет. Кроме того, код намного проще. Объекты обновляются (или добавляются) в базу данных только при сохранении проекта. Таким образом, элементы можно редактировать, затем можно редактировать заказы, и они сохраняются только при сохранении проекта, поскольку они зависят от сохраняемого идентификатора проекта.
Однако прямое использование сопоставленных сущностей имеет огромную проблему: допустим, пользователь редактирует элемент внутри заказа. Затем он снова редактирует его, но на этот раз вместо нажатия «ОК» пользователь нажимает «Отмена». Изменения должны быть отменены. Однако предыдущее состояние было потеряно, так как оно не обновлялось в базе данных и менялось из-за привязки WPF.
Каков наилучший подход для предотвращения этой проблемы? Я не знаю, хорошо ли создание клонов работает в Entity Framework. И создание переменных, которые передают свои значения объекту только при нажатии команды подтверждения, противоречило бы шаблону MVVM и заставило бы меня потерять «преимущества», о которых я уже говорил.
Помогите мне, пожалуйста!
Спасибо!