2013-10-23 86 views
1

我想知道嵌套两个交易是否是一个好的做法?比如用TransactionScope包装我的NHibernate事务为了测试的好处(确保数据库回滚了测试中所做的所有更改)。嵌套交易测试

另一种选择是将我插入到内存中的实体保留在内存中,并在测试结束时删除它们。

哪一个更好?

回答

1

首先,nhibernate不支持嵌套事务!

如果已经打开一个TransactionScope,则另一方不会创建新的事务。如果您只使用事务作用域,它将为连接创建一个新事务。

如果您然后在范围内打开一个事务,这将仍然与nhibernate一起使用。

回到你的问题,它几乎取决于你在TransactionScope中创建的对象的数量。如果它变得太多,你只会简单地发送数据库的事务日志。除此之外,我想说这个概念是完全正确的。

还有一点很重要,如果您使用TransactionScope,并且您使用nhibernate创建了多个会话/事务,则作用域可能会切换到需要MSDTC在目标服务器上运行的分布式事务,否则它将失败。