我想放弃对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方法以处理事务.或者如何更改事务/ discard-submitchanges的工作流程以使所有这些工作一起工作?
那些不是聪明的解决方案:
重新获取所有数据
重新建立与DB的连接(因为它导致(1))
Aaronaught.. 6
为了补充约翰内斯所说的话,我认为这里的困惑源于对DataContext
类似于a的思考DataSet
.事实并非如此.
a中的"表" DataContext
类似于如何从数据库中检索特定类型的数据实体的提示.与a不同DataSet
,DataContext
它实际上并不"包含"数据,它只是跟踪您从中拉出的离散实体.如果DataContext
消失(处置),实体仍然有效,它们只是分离.这DataSet
与个人的情况不同,DataTables
并且DataRows
基本上与他们的容器绑定并且不能比他们的寿命更长.
要使用a的Refresh
方法DataContext
,您需要在实际实体或实体集合上使用它.你不能"刷新"a Table
因为它实际上不是物理表,它只是一种参考.
DataContext
只有在调用SubmitChanges
方法时,才会保留对连接到a的实体的更改.如果丢弃了DataContext
,除非您手动将分离的实体重新附加到新实体,否则绝对无法保持更改DataContext
.
为了补充约翰内斯所说的话,我认为这里的困惑源于对DataContext
类似于a的思考DataSet
.事实并非如此.
a中的"表" DataContext
类似于如何从数据库中检索特定类型的数据实体的提示.与a不同DataSet
,DataContext
它实际上并不"包含"数据,它只是跟踪您从中拉出的离散实体.如果DataContext
消失(处置),实体仍然有效,它们只是分离.这DataSet
与个人的情况不同,DataTables
并且DataRows
基本上与他们的容器绑定并且不能比他们的寿命更长.
要使用a的Refresh
方法DataContext
,您需要在实际实体或实体集合上使用它.你不能"刷新"a Table
因为它实际上不是物理表,它只是一种参考.
DataContext
只有在调用SubmitChanges
方法时,才会保留对连接到a的实体的更改.如果丢弃了DataContext
,除非您手动将分离的实体重新附加到新实体,否则绝对无法保持更改DataContext
.