当前位置:  开发笔记 > 编程语言 > 正文

如何放弃对所有linq表所做的更改?

如何解决《如何放弃对所有linq表所做的更改?》经验,为你挑选了1个好方法。

我想放弃对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.



1> Aaronaught..:

为了补充约翰内斯所说的话,我认为这里的困惑源于对DataContext类似于a的思考DataSet.事实并非如此.

a中的"表" DataContext类似于如何从数据库中检索特定类型的数据实体的提示.与a不同DataSet,DataContext它实际上并不"包含"数据,它只是跟踪您从中拉出的离散实体.如果DataContext消失(处置),实体仍然有效,它们只是分离.这DataSet与个人的情况不同,DataTables并且DataRows基本上与他们的容器绑定并且不能比他们的寿命更长.

要使用a的Refresh方法DataContext,您需要在实际实体或实体集合上使用它.你不能"刷新"a Table因为它实际上不是物理表,它只是一种参考.

DataContext只有在调用SubmitChanges方法时,才会保留对连接到a的实体的更改.如果丢弃了DataContext,除非您手动将分离的实体重新附加到新实体,否则绝对无法保持更改DataContext.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有