【发布时间】:2016-09-09 19:42:57
【问题描述】:
我有一个命令服务类,它利用工作单元模式,使用各种方法通过实体框架更新数据库(本例中为 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 代码优先
【问题讨论】:
标签: c# entity-framework entity-framework-6