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

标签 c# database linq datacontext

我想放弃对 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. 重新获取所有数据
  2. 重新创建与数据库的连接(因为它会导致 (1))

最佳答案

补充一下 Johannes 所说的,我认为这里的困惑源于对 DataContext 的思考。类似于 DataSet .它不是。

DataContext 中的“表”就像关于如何从数据库中检索特定类型的数据实体的提示。不像 DataSet , DataContext实际上并不“包含”数据,它只是跟踪您从中提取的离散实体。如果DataContext消失(被处置),实体仍然有效,它们只是分离。这不同于 DataSet个人所在DataTablesDataRows基本上绑定(bind)到它们的容器,不能比它们长。

为了使用Refresh DataContext 的方法,您需要在实际实体或实体集合上使用它。你不能“刷新” Table<T>因为它实际上不是物理表,它只是一种引用。

对连接到 DataContext 的实体的更改仅当您调用 SubmitChanges 时才会保留方法。如果你处理 DataContext ,除非您手动将分离的实体重新附加到新的 DataContext,否则更改绝对不可能持续存在。 .

关于c# - 如何放弃对所有 linq 表所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2110275/

相关文章:

c# - 使用 foreach 更改对象

Java 列出连接到数据库的参数?

sql - 如何在我的 SQL Server 代理作业中创建一个步骤来运行我的 SSIS 包?

mysql - 简单的 MySQL 查询需要两个多小时

c# - LINQ:按最常见值的计数排序

c# - Xamarin Form - 如何在 UWP 中以 PDF 或 JPEG 格式存储图像

c# - Mono PrivateFontCollection.AddFontFile 错误的解决方法

c# - Linq To SQL InsertAllOnSubmit 和 DeleteAllOnSubmit

c# - 为什么 float 变量在 C# 中停止递增到 16777216?

c# - 搜索 - IQueryable Linq