gpt4 book ai didi

c# - 回滚事务与 LINQ to SQL 有何关系?

转载 作者:太空狗 更新时间:2023-10-29 23:10:39 25 4
gpt4 key购买 nike

问题只是关于回滚更改,而不是提交。

假设我获取一些数据,更改它们,提交更改(可选步骤),然后回滚事务。无论您在何处查看每个作者所写的内容,这都会取消更改。

但我发现这只对了一半——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();
}

最佳答案

数据上下文应被视为一个工作单元。如何粒度取决于您 - 它可以是页面请求,也可以是单个操作;但是 - 如果您遇到异常(或几乎任何意想不到的事情) - 停止;放弃数据上下文和回滚。回滚后,您的数据上下文将会变得困惑,所以不要保留它

此外;不要将数据上下文保留超过必要的时间。它不打算用作应用程序长的数据缓存。

关于c# - 回滚事务与 LINQ to SQL 有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5977452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com