我想要有一些类似于子交易的事情,因为您可以标记一个点,您可以开始子交易,然后在该位的决定点处,您可以回滚(中止子位)或进行有效的承诺,当出场转换承诺时。当然,如果您中止外部交易,标记位也会中止。如何管理子事务或嵌套事务?
我如何能做到这一点与NHibernate,但交易最前一页期间被关闭承诺,因此我真的有错误消息
没有打开的事务提交
我的代码如下:
API.Data.Session session = API.Data.SessionManager.GetSession();
session.BeginTransaction();
try
{
Project project = Project.Load(ID);
...........
Save(project);
.....................
session.CommitTransaction();
}
catch
{
session.RollbackTransaction();
throw;
}
public void save(Project project)
{
Data.SessionManager.GetSession().BeginTransaction();
try
{
Save();
LogIssueChange(test);
Data.SessionManager.GetSession().CommitTransaction();
}
catch
{
Data.SessionManager.GetSession().RollbackTransaction();
throw;
}
}
是不是还有其他方法?我不想直接与数据库交互 – learning 2010-07-20 10:16:35
不,没有其他办法。我根本不用NHibernate中的存储库/服务方法来处理事务,以便多个存储库方法可以参与相同的事务。在分布式系统之外很少需要嵌套事务。我确实有一个名为DeferableTransaction的ISession扩展方法,它使用类似的语义,并允许事务遵从现有事务或启动一个新事务。如果你有兴趣,我会发布它。 – 2010-07-20 12:18:51
不能说OP,但我会有兴趣看到你的impl – DanP 2010-07-20 14:28:02