我正在开发一个系统,用户需要填写表格,并且此信息存储在数据库中。在其中一个屏幕中,我有以下流程:
- 在一个项目中,他可以添加多个订单。
- 每个添加的订单都会打开一个配置屏幕,可以设置订单的内部信息。也可以将项目添加到订单中。
- 每个添加的项目都会打开一个配置屏幕,允许用户设置内部信息。
综上所述,流程为Project -> Order -> Item,其中“A -> B”表示A包含0、1或更多B。
该项目正在使用带有实体框架的 WPF 来管理数据库访问。我将实体数据库映射中的实体直接绑定到屏幕中。通过这种方式,我们对 WPF 有一些“优势”,例如,非空字段被涂成红色。而且,代码要简单得多。实体仅在保存项目时更新(或添加)到数据库中。因此,可以编辑项目,然后可以编辑订单,并且仅在保存项目时才保存它们,因为它们依赖于要保存的项目 ID。
但是,直接使用映射实体有一个很大的问题:假设用户在 Order 中编辑了一个 Item。然后,他再次对其进行编辑,但这一次,用户没有按“确定”,而是按“取消”。必须还原所做的更改。但是,之前的状态丢失了,因为它没有在数据库中更新并且由于 WPF 绑定而被更改。
防止此问题的最佳方法是什么?我不知道在实体框架中创建克隆是否效果很好。并且创建仅在单击确认命令时将其值传输到对象的变量将违反 MVVM 模式,并且会使我失去我已经谈到的“优势”。
请帮我!
谢谢!