sách gpt4 ăn đã đi

c# - EF6 嵌套事务

In lại 作者:太空狗 更新时间:2023-10-29 23:37:18 26 4
mua khóa gpt4 giày nike

我有一个命令服务类,它利用工作单元模式,使用各种方法通过 Entity Framework 更新数据库(在本例中为 SQL Azure)。

命令服务通过对 dbcontext 实例的引用进行实例化,其生命周期由我选择的 DI 框架管理。

一些命令服务类的方法将对数据库的多次更新包装在一个事务中,例如:

public void UpdateStuff(someEntity)
{
using(var tx = _db.Database.BeginTransaction())
{
//Some updates to db
_db.SaveChanges();
//Some other updates to db
_db.SaveChanges();
tx.Commit();
}
}

现在,其中一些方法从它们的事务中调用命令类的其他方法,例如:

public void UpdateWithSomeCascadingStuff(someOtherEntity)
{
using(var tx = _db.Database.BeginTransaction())
{
//Some updates to db
_db.SaveChanges();

//Some other cascading logic and updates to db
var relatedEntityToUpdate = _query.GetSomeEntityToUpdate(someOtherEntity);
UpdateStuff(relatedEntityToUpdate);
_db.SaveChanges();
tx.Commit();
}
}

显然,通过这样做,我为同一个 DbContext 实例嵌套了 EF 事务。

这是否受支持,会造成任何麻烦吗?我可以采取任何替代方法吗?

更新:我正在使用 EF6 Code First

câu trả lời hay nhất

EntityFramework 的 DBContexts 本身实现了 UnitOfWork 和 Repository 模式。

EF6 中的上下文还会自动将所有提交包装在一个事务中(如果它还不是一个事务的一部分)。

所以,不,你不应该在多个工作单元之间共享上下文。他们应该每个人都有自己的。

gia hạn

如果您尝试在同一个 DbContext 上启动重复事务,您会得到:

An unhandled exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll

Additional information: The connection is already in a transaction and cannot participate in another transaction. EntityClient does not support parallel transactions.

所以不,你不能做你要求的事。

关于c# - EF6 嵌套事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37212896/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress