在我的项目中,依赖项注入(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()
是原子的,将在其自己的事务下自动执行。所以你的第二个例子就足够了。
DbContext
和 SaveChanges()
方法是 Entity Framework 中工作单元模式的实现。
Database.BeginTransaction()
在底层数据库上创建事务,还允许调用者设置可选的IsolationLevel
。这是架构中完全不同级别的事务。这是我可能永远不会使用的东西,因为我不喜欢在数据库中包含任何业务逻辑,但我敢打赌它在遗留系统中的使用范围很大。
关于c# - Entity Framework 6 中显式数据库事务的意义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26524910/