问题只是关于回滚更改,而不是提交。
假设我获取一些数据,更改它们,提交更改(可选步骤)并回滚事务。无论您在哪里查看每个作者的写作,都会取消更改。
但我发现这句话只对了一半——LINQ DataContext 将保留更改后的数据!我使用 TransactionScope 和 DataContext.Transaction 对此进行了测试。在这两种情况下我都有相同的行为。
解决方法是在回滚后重新创建 DataContext(但这会导致其他问题,例如缓存数据和处理嵌套事务)或手动丢弃 DataContext 中的更改。然而,这些只是解决方法。
问题
那么我错过了什么? LINQ to SQL 不适合事务吗?如何使用交易以便他们REALLY回滚更改?
Example
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();
}
数据上下文应被视为一个工作单元。如何granular这取决于你——它可以是一个页面请求,也可以是一个单一的操作;但是 - 如果你遇到异常(或几乎任何意外情况) -stop;放弃数据上下文并回滚。回滚后,您的数据上下文将会变得混乱,所以只需不要保留它.
此外;不要将数据上下文保留的时间超过必要的时间。它并非旨在用作应用程序长的数据缓存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)