撤消对数据库表的更新

时间:2014-08-05 16:13:03

标签: c# entity-framework-5

我编写的一个小型winform应用程序在表单上有一个数据绑定数据网格视图。它绑定到数据表。用户可以更改datagridview中显示的数据,然后单击“保存”按钮以更新基础数据库。我使用dataTable.AcceptChanges()语句执行此操作。

我想实现'撤消'功能,以便在更新后,用户改变主意,他们可以通过点击撤消按钮撤消更改。

我原以为我只是将原始数据的副本加载到datagridview中,并在用户进行更改后将其与基础数据进行比较。因此,当“原始”数据与更新后的数据存在差异时,我只是使用原始数据中的内容更新数据库。我希望这是有道理的。

但我的问题是,这是否是一个好主意?我想,保留原始数据的副本并使用它来撤消所做的更改似乎很简单,我只是想知道是否有其他方法/机制来执行此操作。

该程序使用模型构建数据库 - 首先使用Entity Framework。

1 个答案:

答案 0 :(得分:4)

如果您打算将undo作为会话实施,只要SqlConnection仍然有效。

您可以使用SqlConnection.BeginTransaction()创建Transaction Point,然后如果您只想丢弃数据(撤消),请拨打Rollback()Dispose()或永久保存数据在Commit()

上调用SqlTransaction方法

有关如何实施的方法。 。

  1. 启动交易()/创建SavePoint

  2. 每次用户发出Save命令时,请创建SavePoint()(您可以将其推送到Stack

  3. 每次执行撤消命令时,弹出SavePoint名称并进行回滚。


  4. 从实体框架的角度来看。 。

    在您调用SaveChanges()方法之前,所有更改都是本地更改,让用户根据需要进行尽可能多的更改,并且仅在需要永久更改时才执行SaveChanges()