1
我想知道嵌套两个交易是否是一个好的做法?比如用TransactionScope包装我的NHibernate事务为了测试的好处(确保数据库回滚了测试中所做的所有更改)。嵌套交易测试
另一种选择是将我插入到内存中的实体保留在内存中,并在测试结束时删除它们。
哪一个更好?
我想知道嵌套两个交易是否是一个好的做法?比如用TransactionScope包装我的NHibernate事务为了测试的好处(确保数据库回滚了测试中所做的所有更改)。嵌套交易测试
另一种选择是将我插入到内存中的实体保留在内存中,并在测试结束时删除它们。
哪一个更好?
首先,nhibernate不支持嵌套事务!
如果已经打开一个TransactionScope,则另一方不会创建新的事务。如果您只使用事务作用域,它将为连接创建一个新事务。
如果您然后在范围内打开一个事务,这将仍然与nhibernate一起使用。
回到你的问题,它几乎取决于你在TransactionScope中创建的对象的数量。如果它变得太多,你只会简单地发送数据库的事务日志。除此之外,我想说这个概念是完全正确的。
还有一点很重要,如果您使用TransactionScope,并且您使用nhibernate创建了多个会话/事务,则作用域可能会切换到需要MSDTC在目标服务器上运行的分布式事务,否则它将失败。