gpt4 book ai didi

c# - 完成事务后更改 TransactionScope IsolationLevel

转载 作者:太空狗 更新时间:2023-10-29 21:28:31 24 4
gpt4 key购买 nike

当我在数据库中保存数据时,我使用了将 IsolationLevel 设置为 Serializable 的 TransactionScope。

TransactionOptions options = new TransactionOptions
{
IsolationLevel=IsolationLevel.Serializable
};


using (var transaction = new TransactionScope(TransactionScopeOption.Required,options))
{
transation.Complete();
}

现在执行结束后,我想更改 TransactionScopeIsolationLevel。

编辑

我的理解是,如果 IsolationLevel 设置为 Serializable,那么在完成事务后,连接对象将关闭并返回到连接池,当其他请求到达时,它会从池中获取该连接对象,从而受到先前的影响隔离级别。所以我想在每次交易后将隔离级别更改为默认值。

最佳答案

你是对的:将连接返回到池中时,隔离级别不会重置。这是一种可怕的行为,但我们坚持下去......

有两种策略:

  1. 返回前重置隔离级别:这是您的方法。
  2. 始终使用具有显式事务(或 TransactionScope)的连接,以保证隔离级别。

我建议你做后者。

如果您坚持执行 (1),您可以在关闭 TransactionScope 后简单地更改隔离级别,但您必须对连接对象执行此操作。示例:

using (SqlConnection connection = new SqlConnection(connectionString))
{
using (var transaction = new TransactionScope(TransactionScopeOption.Required,options))
{
connection.Open(); //open inside of scope so that the conn enlists itself
transation.Complete();
}
//conn is still open but without transaction
conn.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL XXX"); //pseudo-code
} //return to pool

这对你有用吗?

关于c# - 完成事务后更改 TransactionScope IsolationLevel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14957330/

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