Kev*_*vin 2 c# entity-framework-5
我编写的一个小型 winform 应用程序在表单上有一个数据绑定 datagridview。它绑定到数据表。用户可以更改 datagridview 中显示的数据并单击“保存”按钮来更新底层数据库。我用一个dataTable.AcceptChanges()声明来做到这一点。
我想实现“撤消”功能,这样,如果更新后用户改变主意,他们可以通过点击“撤消”按钮来撤消更改。
我想我基本上只是在加载到 datagridview 时复制原始数据,然后在用户进行更改后将其与底层数据表进行比较。因此,当“原始”数据与更新后的数据之间存在差异时,我只需使用原始数据中的内容更新数据库即可。我希望这是有道理的。
但我的问题是,这是否是实现这一目标的好主意?我想保留原始数据的副本并使用它来撤消所做的更改似乎很简单,我只是想知道是否还有其他方法/机制可以做到这一点。
该程序使用使用实体框架构建的数据库优先的模型。
如果您计划实施undo基于 as 的会话,只要SqlConnection保持打开状态即可。
您可以创建一个Transaction Pointusing SqlConnection.BeginTransaction(),然后如果您只是想丢弃数据(撤消),则调用Rollback()或Dispose()或 来永久保存数据,请调用该Commit() 方法SqlTransaction
一种关于如何实施的方法。。。
开始事务() /创建保存点
每次用户发出Save命令时,都会创建一个SavePoint()(您可以将其推送到Stack
每次发出撤消命令时,都会弹出 SavePoint 名称并执行回滚。
从实体框架来看。。。
在您调用SaveChanges()方法之前,所有更改都是本地的,让用户可以根据需要进行尽可能多的更改,并且SaveChanges()仅在需要永久进行这些更改时才执行 a 。