我只是想知道什么是好的使用可序列化的原因作为创建时的默认隔离级别系统.交易 交易范围,因为我想不出任何(而且似乎你无法通过更改默认值web/app.config
所以你总是必须在你的代码中设置它)
using(var transaction = TransactionScope())
{
... //creates a Transaction with Serializable Level
}
相反,我总是必须编写这样的样板代码:
var txOptions = new System.Transactions.TransactionOptions();
txOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using(var transaction = new TransactionScope(TransactionScopeOption.Required, txOptions))
{
...
}
有任何想法吗?
事实Serializable
默认值来自 .NET 尚未发布的时期(1999 年之前),来自 DTC(分布式事务协调器) 编程。
DTC 使用本机隔离级别枚举:
ISOLATIONLEVEL_SERIALIZABLE当前事务读取的数据不能
被另一个事务更改,直到当前事务为止
完成。不能插入影响当前数据的新数据
交易。这是最安全的隔离级别,也是默认的,
但允许最低级别的并发。
.NET TransactionScope
是建立在这些技术之上的。
现在,下一个问题是:为什么 DTC 定义ISOLATIONLEVEL_SERIALIZABLE
作为默认交易级别?我想这是因为 DTC 是在 1995 年左右设计的(当然是在 1999 年之前)。当时,SQL 标准是 SQL-92(或 SQL2)。
这是什么SQL-92关于交易级别的说法:
SQL 事务的隔离级别为 READ UNCOMMITTED,
已提交读、可重复读或可串行化。隔离级别
SQL 事务的定义定义了操作的程度
SQL 事务中的 SQL 数据或模式受
的影响 和 可以影响对 SQL 数据或模式的操作
并发 SQL 事务。SQL 的隔离级别
事务默认是可串行化的。级别可以明确
由设定的<set transaction statement>
.
在隔离级别执行并发 SQL 事务
SERIALIZABLE 保证是可序列化的。一个可序列化的
执行被定义为操作的执行
同时执行产生相同效果的 SQL 事务
作为这些相同 SQL 事务的一些串行执行。连续剧
执行是指每个 SQL 事务执行完成
在下一个 SQL 事务开始之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)