用于测试的嵌套事务

时间:2013-10-23 14:47:17

标签: nhibernate testing transactions transactionscope

我想知道嵌套两笔交易是否是一个好习惯?例如,使用TransactionScope包装我的NHibernate事务以获得测试的好处(确保db回滚测试中所做的所有更改)。

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

哪一个更好?

1 个答案:

答案 0 :(得分:1)

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

如果已经打开了一个新事务,另一方的TransactionScope将不会创建新事务。如果仅使用事务范围,它将为连接创建新事务。

如果然后在范围内打开一个事务,这仍然适用于nhibernate。

回到你的问题,它几乎取决于你在TransactionScope中创建的对象数量。如果它变得太多,您只需垃圾邮件数据库的事务日志。除此之外,我想说这个概念非常好。

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