gpt4 book ai didi

c# - Entity Framework 6 中显式数据库事务的意义何在?

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:23 25 4
gpt4 key购买 nike

在我的项目中,依赖注入(inject)将为每个请求实例化 DomainContext( Entity Framework 6 DbContext)。我想知道关于交易的正确做法是什么。我知道 SaveChanges 将在内部使用事务。

我是否应该担心 DomainContext 中可能遗留的变化?

我认为使用显式事务可能会使我免受这种情况的影响,如:

public class FooService : IFooService
{
private DomainContext db;

public FooService(DomainContext db)
{
this.db = db;
}

public void MergeEntities(Entity source, Entity target)
{
using (var uow = db.Database.BeginTransaction())
{
// merge source into target

db.SaveChanges();

uow.Commit();
}
}
}

我不确定我是否应该只使用它,它可能会给我同样的保护:

public class FooService : IFooService
{
private DomainContext db;

public FooService(DomainContext db)
{
this.db = db;
}

public void MergeEntities(Entity source, Entity target)
{
// merge source into target

db.SaveChanges();
}
}

最佳答案

DbContext.SaveChanges() 是原子的,将在它自己的事务下自动执行。所以你的第二个例子就足够了。

DbContextSaveChanges() 方法是 Entity Framework 中工作单元模式的实现。

Database.BeginTransaction() 在底层数据库上创建事务,还允许调用者设置可选的 IsolationLevel。它是架构中完全不同级别的事务。这是我可能永远不会使用的东西,因为我不喜欢在数据库中有任何业务逻辑,但我敢打赌它在遗留系统中有很大的使用范围。

关于c# - Entity Framework 6 中显式数据库事务的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26524910/

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