我想知道在单个会话上创建多个事务是否有任何问题,如下所示:
using (var session = factory.OpenSession())
{
using (var trans1 = session.BeginTransaction())
{
.....
trans1.commit();
}
using (var trans2 = session.BeginTransaction())
{
.....
trans2.commit();
}
using (var trans3 = session.BeginTransaction())
{
.....
trans3.commit();
}
using (var trans = session.BeginTransaction())
{
.....
// trans1.commit();
}
}
这是可能的,还是必须为每个事务打开一个新的会话对象?
谢谢你的帮助。
5条答案
按热度按时间6yt4nkrj1#
是的,你做的很好。
nhibernate不支持的是多个嵌套事务。
x7yiwoj42#
即使在NHibernate中,在一个会话上有多个事务也是不常见的。另外,根据个人经验,我可以说在任何其他情况下重用会话都不是一个好主意。
我建议尽可能保持工作流程简单,以避免任何副作用:
idv4meu83#
Web环境中最常见的策略是每个请求都有会话。
当它涉及到事务时,它实际上取决于您的用例。
你所做的一切都很好,否则nhibernate不会将session和transaction分开。
但这又取决于您的业务情况。
我建议你用
IDisposable
Packagesession.BeginTransaction()
,所以在Dispose
上你要确保提交事务。aiqt4smr4#
没有问题,虽然这是不寻常的。请记住,如果任何事务回滚,则应丢弃会话。
mw3dktmi5#
我想进一步补充的一点是,NHibernate不能处理重叠的事务,即使它们来自不同的会话(例如全局DB服务器和本地DB文件)。因此,对于同步,您始终需要创建对象的真实的示例,并且不能通过查询传递它们。