问题只是回滚变化,而不是提交.假设我获取了一些数据,我更改了它们,我提交了更改(可选步骤)并且我回滚了事务.无论你在哪里看到每个作者写的内容,都会取消这些更改.但我发现这是半真的 – LINQ DataContext将保留更...

问题只是回滚变化,而不是提交.
假设我获取了一些数据,我更改了它们,我提交了更改(可选步骤)并且我回滚了事务.无论你在哪里看到每个作者写的内容,都会取消这些更改.
但我发现这是半真的 – LINQ DataContext将保留更改的数据!我使用TransactionScope和DataContext.Transaction测试了这个.在这两种情况下,我都有相同的行为.
解决方法是在回滚后重新创建DataContext(但这会导致其他问题,如缓存数据和处理嵌套事务)或手动丢弃DataContext中的更改.然而,这些只是解决方法.
问题
那我错过了什么? LINQ to SQL不适合交易吗?如何使用事务,以便他们真的回滚更改?
例
MyTable record = null;
db.Connection.Open();
using (db.Transaction = db.Connection.BeginTransaction())
{
record = db.MyTable.First();
record.BoolField = !record.BoolField; // changed
db.SubmitChanges();
db.Transaction.Rollback();
}
解决方法:
数据上下文应被视为工作单元.您的精确程度取决于您 – 它可以是页面请求,也可以是单个操作;但是 – 如果你得到一个例外(或几乎任何意外) – 停止;放弃数据上下文和回滚.回滚后,您的数据上下文将会混淆,所以不要保留它.
另外;不要将数据上下文保留的时间超过必要的时间.它不是一个app-long数据缓存.
本文标题为:c# – 如何回滚与LINQ to SQL相关的事务?


基础教程推荐
- Unity封装延时调用定时器 2023-02-16
- 在c#中从Windows azure中删除blob 2023-09-19
- C#中 Json 序列化去掉null值的方法 2022-11-18
- centos7 部署netcore 2023-09-26
- RSA密钥--JAVA和C#的区别及联系 2023-05-05
- 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序) 2023-02-08
- C#支付宝新版支付请求接口调用 2022-12-30
- 探索 .NET Core 依赖注入的 IServiceCollection 2023-09-27
- C#与C++与互操作实例讲解 2023-01-28
- windows server 2012 R2里IIS配置.net core2.1遇到的坑 2023-09-27