我想放弃对 linq 表所做的所有更改(这意味着——我使用 linq,并且数据在客户端更改,服务器上的数据完好无损)。如何做到这一点?
编辑:问题部分解决
http://graemehill.ca/discard-changes-in-linq-to-sql-datacontext/
只要您不使用事务,它就可以工作。当您这样做并使用混合“模式”进行记录时,就会出现问题:
begin trans
insert a record
update inserted record
commit trans
当您按上述方式更新记录时,Linq 将其计为更新记录,如果出现异常,您有两个操作——回滚事务并丢弃 Linq 端的数据。在丢弃更改时,Linq 尝试从数据库中获取它(丢弃更新意味着重新获取记录数据),但是由于所有更改都已回滚,因此没有要更新的记录。
问题
如何以一种智能的通用方式改进 DiscardChanges 方法来处理事务。或者如何更改交易/丢弃提交更改的工作流程以使所有这些工作协同工作?
这些都不是明智的解决方案:
- 重新获取所有数据
- 重新创建与数据库的连接(因为它会导致 (1))
最佳答案
补充一下 Johannes 所说的,我认为这里的困惑源于对 DataContext
的思考。类似于 DataSet
.它不是。
DataContext
中的“表”就像关于如何从数据库中检索特定类型的数据实体的提示。不像 DataSet
, DataContext
实际上并不“包含”数据,它只是跟踪您从中提取的离散实体。如果DataContext
消失(被处置),实体仍然有效,它们只是分离。这不同于 DataSet
个人所在DataTables
和 DataRows
基本上绑定(bind)到它们的容器,不能比它们长。
为了使用Refresh
DataContext
的方法,您需要在实际实体或实体集合上使用它。你不能“刷新” Table<T>
因为它实际上不是物理表,它只是一种引用。
对连接到 DataContext
的实体的更改仅当您调用 SubmitChanges
时才会保留方法。如果你处理 DataContext
,除非您手动将分离的实体重新附加到新的 DataContext
,否则更改绝对不可能持续存在。 .
关于c# - 如何放弃对所有 linq 表所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2110275/