gpt4 book ai didi

entity-framework - `DbContext.Database.BeginTransaction` 不能嵌套?

转载 作者:行者123 更新时间:2023-12-03 14:50:26 27 4
gpt4 key购买 nike

我正在尝试使用事务的 EF6 方式,并注意到以下代码

using (db.Database.BeginTransaction())
{
// something
using (db.Database.BeginTransaction())
{
/// something
}
}

在第二个开始事务上抛出异常告诉我
The connection is already in a transaction and cannot participate in another
transaction. EntityClient does not support parallel transactions.

并不是说我想做一个并行事务,无论这对一个连接意味着什么。我只是想要一个嵌套的。

那么这确实不支持正在发生的事情吗?

最佳答案

您可以使用 CurrentTransaction属性(property)。

using (db.Database.BeginTransaction())
{
if(db.Database.CurrentTransaction!=null)
{
/// something
}
else
{
using (db.Database.BeginTransaction())
{
/// the same something
}
}
}

语法比较笨拙。我经常依靠扩展方法将某些东西包装到事务中
    public static void WrapInTransaction(this DbContext db, Action something)
{
if (db.Database.CurrentTransaction != null)
something();
else
using (db.Database.BeginTransaction())
{
something();
}
}

关于entity-framework - `DbContext.Database.BeginTransaction` 不能嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38073626/

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