ADO.NET隔离级别v TransactionScope隔离级别
我已经了解到ADO.NET的默认隔离级别(当不使用事务时,即每个语句作为原子操作执行时)为“读取提交”,TransactionScope()的默认隔离级别为“可序列化”。这有什么原因吗ADO.NET隔离级别v TransactionScope隔离级别,.net,transactions,.net,Transactions,我已经了解到ADO.NET的默认隔离级别(当不使用事务时,即每个语句作为原子操作执行时)为“读取提交”,TransactionScope()的默认隔离级别为“可序列化”。这有什么原因吗 我已经阅读了很多关于这一主题的网页,但我还没有找到我的具体问题的答案。A事务是一个工作单元,基本上意味着在该范围内执行了多个活动。例如,预订购物车包括检查产品、检查现有数量、计算运费和更新财务账目。所有这些操作都应该是“一”或“无”,如果其中任何一个操作的幻影读取方式与隔离级别“读取已提交”类似,则会将数据置于陈
我已经阅读了很多关于这一主题的网页,但我还没有找到我的具体问题的答案。A事务是一个工作单元,基本上意味着在该范围内执行了多个活动。例如,预订购物车包括检查产品、检查现有数量、计算运费和更新财务账目。所有这些操作都应该是“一”或“无”,如果其中任何一个操作的幻影读取方式与隔离级别“读取已提交”类似,则会将数据置于陈旧状态。如果使用了“序列化”作用域,则它将阻止在事务中对涉及的实体进行任何更新
在这种情况下,如果您查看了一个月的财务报告,那么“读取已提交”隔离级别起作用,因为您查看的是现有数据,没有进行太多修改,即使是幻影读取也不会在报告中产生太大的差异 原因是一个事务作用域可以跨越多个(子)事务,这些事务都与分布式事务协调器(MS-DTC)协调。大多数情况下,您需要确保所有子转换都使用相同的数据,即使它们之间发生了提交 例如,有3种方法的服务:checkbalance、increasebalance和decreasebalance。 每个方法都启动一个事务、打开数据库连接、执行SQL、关闭连接并提交事务 典型的情况是,此服务的客户端将:
IsolationLevel.ReadCommitted可能会导致帐户1的余额低于零,如果其他人以足够的金额减少余额,并在支票和减少之间提交该交易。谢谢,但我不相信这能回答我的问题。我理解这两种隔离类型之间的区别。我不明白为什么TransactionScope在默认情况下与SQL Server具有不同的隔离级别。嗯,任何RDBMS解决方案在默认情况下都支持ACID属性。默认情况下,如果没有事务范围,它将被读取并提交。我希望我回答了你的问题。你知道隔离级别可以用transactionscope序列化的原因吗?我怀疑这只是transactionscope开发人员做出的设计决策。想想看,任何设计都基于您可能知道的用例。在单个事务中,如果您需要控制,那么对单个表进行读提交是可行的,但是如果您需要支持更新多个表并确保它满足ACID属性,该怎么办呢。然后您需要TransactionScope。这只是隔离级别的另一个名称,因为您无法在同一隔离级别中完成所有操作。再次感谢。您是说如果要更新多个表,您应该始终使用可序列化的隔离级别吗?