【问题标题】:Undoing an update to a database table撤消对数据库表的更新
【发布时间】:2014-08-06 00:32:06
【问题描述】:

我编写的一个小型 winform 应用程序在表单上有一个数据绑定数据网格视图。它绑定到数据表。用户可以更改 datagridview 中显示的数据并点击 Save 按钮来更新底层数据库。我使用dataTable.AcceptChanges() 声明来做到这一点。

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

我在想我基本上只是在原始数据加载到 datagridview 时复制原始数据,然后在用户进行更改后将其与基础数据表进行比较。因此,当“原始”数据与更新后的数据存在差异时,我只需使用原始数据中的内容更新数据库即可。我希望这是有道理的。

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

该程序使用模型构建的数据库优先和实体框架。

【问题讨论】:

    标签: c# entity-framework-5


    【解决方案1】:

    如果您计划将undo 实现为基于会话,只要SqlConnection 保持打开状态。

    您可以使用SqlConnection.BeginTransaction() 创建Transaction Point,然后如果您只是想丢弃数据(撤消)然后调用Rollback()Dispose() 或永久保存数据调用@ 上的Commit() 方法987654329@


    关于如何实现 . . .

    1. 开始事务()/创建保存点

    2. 每次用户发出Save命令时,创建一个SavePoint()(你可以在Stack上推送它

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


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

    在您调用SaveChanges() 方法之前,所有更改都是本地的,让用户随心所欲地进行更改,并且仅在您需要永久进行这些更改时才执行SaveChanges()

    【讨论】:

    • 啊!这听起来像我正在寻找的。由于我使用的是实体框架,因此我将研究有关 EF5.0 的事务点,看看我能找到什么。感谢您为我指明正确的方向!时间一到,我会立即标记答案。
    • 除非您有多个用户编辑相同的数据(这可能不适用,因为似乎只有一个用户)。
    • @daryal 正确。此应用程序仅供一个人使用。但是,记住这一点很好。谢谢!
    • @AppDeveloper 感谢您提供额外信息。我非常感激。我想你已经给了我足够的支持。再次感谢!
    • @Kevin - 很高兴为您提供帮助 :) !
    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多