全部,
我正在尝试一种方法(算法),将实体对象列表传递给我的 UI(Win 表单应用程序)中的表单进行编辑(比如在网格中 - 这与此无关 - 这是我想要的概念建立)。表单,比如说它被命名为 FormEdit,有一个 OK、Cancel 和 Apply 按钮。
例如,我的实体具有以下层次结构:
Class Entity1
...
Entity2List As EntityCollection(Of Entity2)
...
End Class
Class Entity2
...
SomeValue As String ' This would be a field in my entity mapping to the database
...
它是我要在 FormEdit 中编辑的 Entity2List。
FormEdit 将从我的主窗体触发,该主窗体将传入 Entity2List。主窗体中将有一个保存按钮,它将执行 context.SaveChanges()。主窗体将执行初始加载。
单击“确定”后,任何更改都将保留,并且 FormEdit 将关闭。单击应用时,应保留任何更改。单击取消时,我想忽略在 FormEdit 中所做的任何编辑并将其关闭,以便 Entity1.Entity2List 在加载 FormEdit 时处于初始状态(除非单击应用 - 请参见下面的场景)。
现在,我可以多次进入 FormEdit,因此所做的任何更改都需要在该表单的范围内。因此,假设我执行以下操作,给定以下初始状态:
Entity1 中有一个记录/行/对象。Entity1.Entity2List 包含 2 个记录/行/对象,具有以下内容:
Record1: SomeValue = 33
Record2: SomeValue = 10
方案 1
- 启动应用程序 - 加载到主窗体中的实体。
- 单击编辑按钮以触发以 Entity1(Instance).Entity2List 作为参数的 FormEdit 的显示。
- 向网格添加一个新行,这反过来又向 Entity1.Entity2List 添加一行。
- 修改 Record1,将 SomeValue 从 33 改为 100。
- 单击取消。这应该将 Entity1.Entity2List 返回到它的初始状态。
方案 2
- 启动应用程序 - 加载到主窗体中的实体。
- 单击编辑按钮以触发以 Entity1(Instance).Entity2List 作为参数的 FormEdit 的显示。
- 修改 Record1,将 SomeValue 从 33 改为 100。
- 单击应用。
- 修改 Record1,将 SomeValue 从 100 更改为 -9。
- 单击取消。这将恢复在步骤 5 中所做的更改。在单击应用时将记住在步骤 3 中所做的更改。
我需要某种机制来跟踪这样的变化。单击确定/应用时,将对我的上下文中的对象进行更改。
有什么方法可以做到这一点?欢迎所有想法和建议。
干杯,
安德斯