- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我在数据库中保存数据时,我使用了将 IsolationLevel 设置为 Serializable 的 TransactionScope。
TransactionOptions options = new TransactionOptions
{
IsolationLevel=IsolationLevel.Serializable
};
using (var transaction = new TransactionScope(TransactionScopeOption.Required,options))
{
transation.Complete();
}
现在执行结束后,我想更改 TransactionScopeIsolationLevel。
编辑
我的理解是,如果 IsolationLevel 设置为 Serializable,那么在完成事务后,连接对象将关闭并返回到连接池,当其他请求到达时,它会从池中获取该连接对象,从而受到先前的影响隔离级别。所以我想在每次交易后将隔离级别更改为默认值。
最佳答案
你是对的:将连接返回到池中时,隔离级别不会重置。这是一种可怕的行为,但我们坚持下去......
有两种策略:
我建议你做后者。
如果您坚持执行 (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/
我试图通过 Entity v.4.0.30319 围绕我对存储过程的调用包装一个 TransactionScope。我一直遇到以下异常: Transactions with IsolationLeve
我正在开发一个应用程序,该应用程序应该在收到 PayPal 即时付款通知时创建产品(如运输保险单)。不幸的是,PayPal 有时会发送重复的通知。此外,还有另一个第三方在从 PayPal 获取更新时同
当我在数据库中保存数据时,我使用了将 IsolationLevel 设置为 Serializable 的 TransactionScope。 TransactionOptions options =
在我们的 Azure 数据库中,存在很多死锁。我们尝试将 TransactionScope 类的隔离级别更改为已提交读和可串行化,但死锁图一直显示隔离级别为已提交读 (2)。我们假设它继续使用已提交读
我想在我的项目中使用TransactionScope。我读到它,发现它在数据库中创建了一个隐式事务。我想知道 TransactionScope 是否锁定它操作的表? 例如在此代码中: using (E
我是构建基于 ADO.NET 的网站的团队的一员。有时,我们有多个开发人员和一个自动化测试工具同时工作数据库的开发副本。 我们使用快照隔离级别,据我所知,它使用乐观并发:它不是锁定,而是希望最好的结果
我有一个进程启动事务,将记录插入 Table1,然后调用长时间运行的 Web 服务(最多 30 秒)。如果 Web 服务调用失败,则插入回滚(这是我们想要的)。这是插入的示例(实际上是对多个表的多次插
这MSDN article指出: An isolation level has connection-wide scope, and once set for a connection with th
在 .NET Core 项目中,我使用 EntityFramework,并且在我的类存储库中注入(inject)了一个 DbContext (shopContext)。我有下一个查询: var res
我正在为我的下一个新应用评估 EF。 如何全局更改应用程序中所有 EF 事务的 IsolationLevel?例如:假设我想使用“读取已提交快照”。 虽然当我明确需要 TransactionScope
以下代码在应用程序“使用”为“低”时运行,插入正在进行。 一旦我的使用率很高,我就会收到错误 Transactions with IsolationLevel Snapshot cannot be p
我正在尝试在域级别使用 TransactionScope,因此我可以跨(可能)多个存储库操作数据,但将所有这些保存在同一事务中。 我有以下保存方法: public void Save(MyEntity
我尝试将消息推送到 Azure 服务总线上的主题,但是当我这样做时,出现以下异常: System.InvalidOperationException was unhandled by user cod
在我的 .NET 3.5 项目中,我创建了一个名为 conn 的 OracleConnection 对象。 然后我创建一个交易对象如下: using (OracleTransaction trans
我们有一位客户在使用我们的数据库应用程序时遇到了一些阻塞问题。我们要求他们运行 Blocked Process Report 跟踪,他们给我们的跟踪显示在 SELECT 和 UPDATE 操作之间发生
您好,当调用代码有待处理事务时,我无法从数据库中读取数据。像这样: f1() { DbTransaction t = Connection1.BeginTransaction(IsolationLev
我有一些数据要插入到 2 个数据库(1 个 MSSQL Server,2 个 POSTGRY)中。如果在两个数据库中都插入了记录,那么都应该提交,否则都应该回滚。 任何人都可以帮助我知道我必须在我的
我有多个应用程序通过多个事务访问一个表,我希望这些多个应用程序/事务能够让执行该事务的应用程序相应地插入每个主键/身份。出于某种原因,我不能使用 SCOPE_IDENTITY,这就是为什么我最后选择使
我只是想知道在创建 System.Transactions 时,使用 Serializable 作为默认隔离级别的一个很好的理由是什么? TransactionScope,因为我想不出任何(而且你似乎
更改数据库事务中的隔离级别是可以的,包括将一个事务加入到已经运行的事务中的情况。从现在开始,您只需更改处理锁的方式即可。使用 SQL Server,这运行没有问题: begin transaction
我是一名优秀的程序员,十分优秀!