gpt4 book ai didi

c# - TransactionScope 是否支持原子数据库执行?

转载 作者:行者123 更新时间:2023-11-30 15:43:20 26 4
gpt4 key购买 nike

我目前正在开发一个项目,其中使用 ADO Entity Framework 在 .Net 中实现 DAL。

数据库结构并不简单,我希望能够确保某些数据库操作是原子的。

我知道您可以通过创建 STORED PROCEDURE 并使用 DB TRANSACTION(如 this SO post 中所述)来做到这一点。 (我正在使用 SQL Server)

问题是,我希望尽可能将逻辑保留在软件方面,并且我正在考虑使用 .Net TransactionScope。尽管我知道从软件的角度来看它运行良好(在提交整个范围之前不会向数据库提交任何内容),但我怀疑它是否仍能确保数据库原子执行。

有人知道吗?

更具体地说,通常代码如下所示:

using (TransactionScope scope = new TransactionScope())
{
/*
* Do some opreations such as reads, write, insert, deletes
*/
scope.Commit()
}

我想确定的是,括号内的所有内容都是“自动”完成的(我猜是 isolation=SERIALIZABLE)。我的意思是,当范围内的代码正在执行时,我不希望数据库的状态能够改变。

最佳答案

TransactionScope 在事务中运行更新(可能还有读取,具体取决于您的事务隔离级别)

数据库提供者已经是这个事务的一部分,因为它们在事务范围内使用 - 因此事务范围实际上是一个数据库事务(如果事务中涉及多个数据库/消息队列等,则可能更多) )

编辑: Entity Framework 详细信息

Entity Framework 使用底层提供者的连接 BeginTransaction 方法。在 SqlConnection 的情况下,它使用 SqlServer 的默认值,因此将使用 ReadCommitted

因此,如果您不使用事务范围,它将默认为 Read Committed 而不是 Serializable

关于c# - TransactionScope 是否支持原子数据库执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6786760/

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